alpar@1052: struct TR alpar@1052: { alpar@1052: int a; alpar@1052: int b; alpar@1052: int c; alpar@1052: }; alpar@1052: alpar@1052: template struct D : public T alpar@1052: { alpar@1052: alpar@1052: D(const T &tt) : T(tt) {}; alpar@1052: alpar@1052: template struct TA : public T { alpar@1052: X a; alpar@1052: TA(const T &t,const X& x) : T(t), a(x) {}; alpar@1052: }; alpar@1052: alpar@1052: template D > setA(const X &x) { alpar@1052: return D >(TA(*this,x)); alpar@1052: } alpar@1052: alpar@1052: template struct TB : public T { alpar@1052: X b; alpar@1052: TB(const T &t,const X& x) : T(t), b(x) {}; alpar@1052: }; alpar@1052: alpar@1052: template D > setB(const X &x) { alpar@1052: return D >(TB(*this,x)); alpar@1052: } alpar@1052: alpar@1052: template struct TC : public T { alpar@1052: X c; alpar@1052: TC(const T &t,const X& x) : T(t), c(x) {}; alpar@1052: }; alpar@1052: alpar@1052: template D > setC(const X &x) { alpar@1052: return D >(TC(*this,x)); alpar@1052: } alpar@1052: ~D() alpar@1052: { alpar@1052: //Itt csinalunk valamit alpar@1052: } alpar@1052: }; alpar@1052: alpar@1052: D d() alpar@1052: { alpar@1052: return D(TR()); alpar@1052: } alpar@1052: alpar@1052: int main() alpar@1052: { alpar@1052: d(); alpar@1052: d().setA(5.5).setB(10).setC(1.5e12); alpar@1052: }