alpar@1105: class AlgorithmDefaultTypes alpar@1105: { alpar@1105: public: alpar@1105: typedef int Adat; alpar@1105: }; alpar@1105: alpar@1105: template alpar@1105: class AlgorithmTypes : public T alpar@1105: { alpar@1105: public: alpar@1105: template alpar@1105: class SetAdat : public T { X Adat; }; alpar@1105: }; alpar@1105: alpar@1105: template > alpar@1105: class AlgorithmDefaultDataFields : public T alpar@1105: { alpar@1105: protected: alpar@1105: typename T::Adat adat; alpar@1105: }; alpar@1105: alpar@1105: template > alpar@1105: class Algorithm : public T alpar@1105: { alpar@1105: int _intAdat; alpar@1105: public: alpar@1105: Algorithm() {}; alpar@1105: Algorithm(const T &tt) : T(tt) {}; alpar@1105: alpar@1105: template class _SetAdat : public T { alpar@1105: protected: alpar@1105: X adat; alpar@1105: public: alpar@1105: _SetAdat() {}; //"Algorithm<>::_SetAdat b;"-hez kell!!!! alpar@1105: // De az is rossz!!!!! alpar@1105: _SetAdat(const T &t,const X& x) : T(t), adat(x) {}; alpar@1105: }; alpar@1105: alpar@1105: template alpar@1105: Algorithm<_SetAdat > setAdat(const X &x) { alpar@1105: return Algorithm<_SetAdat >(_SetAdat(*this,x)); alpar@1105: } alpar@1105: alpar@1105: Algorithm &setIntAdat(int i) {_intAdat=i;return *this;} alpar@1105: //vagy: alpar@1105: Algorithm &intAdat(int i) {_intAdat=i;return *this;} alpar@1105: alpar@1105: typename T::Adat run() alpar@1105: { alpar@1105: //Itt csinalunk valamit alpar@1105: return typename T::Adat(); alpar@1105: } alpar@1105: ~Algorithm() alpar@1105: { alpar@1105: //Itt nem csinalunk semmit alpar@1105: } alpar@1105: }; alpar@1105: alpar@1105: Algorithm<> algorithm() alpar@1105: { alpar@1105: return Algorithm<>(); alpar@1105: } alpar@1105: alpar@1105: int main() alpar@1105: { alpar@1105: Algorithm<> a; alpar@1105: alpar@1105: Algorithm<>::_SetAdat b; b=b;//Ez itt nem az, amit szeretnenk!!! alpar@1105: alpar@1105: Algorithm<>::SetAdat c; c=c; //Ez itt nem az, amit szeretnenk!!! alpar@1105: alpar@1105: a.run(); alpar@1105: // b.run(); alpar@1105: // c.run(); alpar@1105: alpar@1105: algorithm().run(); alpar@1105: algorithm().setAdat(5.2).run(); alpar@1105: }