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 alpar@1052: { alpar@1052: T t; 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: template D > setA(const X &x) { alpar@1052: return D >(TA(this->t,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->t,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->t,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: }