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<class T> struct D : public T alpar@1052: { alpar@1052: alpar@1052: D(const T &tt) : T(tt) {}; alpar@1052: alpar@1052: template<class X> 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<class X> D<TA<X> > setA(const X &x) { alpar@1052: return D<TA<X> >(TA<X>(*this,x)); alpar@1052: } alpar@1052: alpar@1052: template<class X> 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<class X> D<TB<X> > setB(const X &x) { alpar@1052: return D<TB<X> >(TB<X>(*this,x)); alpar@1052: } alpar@1052: alpar@1052: template<class X> 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<class X> D<TC<X> > setC(const X &x) { alpar@1052: return D<TC<X> >(TC<X>(*this,x)); alpar@1052: } alpar@1052: ~D() alpar@1052: { alpar@1052: //Itt csinalunk valamit alpar@1052: } alpar@1052: }; alpar@1052: alpar@1052: D<TR> d() alpar@1052: { alpar@1052: return D<TR>(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: }