alpar@1203: ///\file alpar@1203: ///Named template study alpar@1203: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: class AlgorithmDefaultTypes alpar@1105: { alpar@1105: public: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: typedef int Adat; alpar@1105: }; alpar@1105: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: template alpar@1105: class AlgorithmTypes : public T alpar@1105: { alpar@1105: public: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: template alpar@1105: class SetAdat : public T { X Adat; }; alpar@1105: }; alpar@1105: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: template > alpar@1105: class AlgorithmDefaultDataFields : public T alpar@1105: { alpar@1105: protected: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1203: typedef T TypeTraits; //Jo ez a nev? alpar@1203: protected: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: typename T::Adat adat; alpar@1105: }; alpar@1105: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// 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@1203: typedef X Adat; 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@1203: ///\name Funtion Named Parameters alpar@1203: alpar@1203: ///@{ alpar@1203: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: template alpar@1105: Algorithm<_SetAdat > setAdat(const X &x) { alpar@1105: return Algorithm<_SetAdat >(_SetAdat(*this,x)); alpar@1105: } alpar@1203: alpar@1203: ///@} alpar@1203: ///\name Named Parameters alpar@1105: alpar@1203: ///@{ alpar@1203: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1203: template alpar@1203: class SetAdat : alpar@1203: public Algorithm > > alpar@1203: {}; alpar@1203: alpar@1203: ///@} alpar@1203: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: Algorithm &setIntAdat(int i) {_intAdat=i;return *this;} alpar@1105: //vagy: alpar@1203: ///Vagy alpar@1203: alpar@1203: ///Vagy... alpar@1203: /// alpar@1105: Algorithm &intAdat(int i) {_intAdat=i;return *this;} alpar@1105: alpar@1203: //Maga az algoritmus!!!!!!! alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// alpar@1105: typename T::Adat run() alpar@1105: { alpar@1105: //Itt csinalunk valamit alpar@1203: return adat; alpar@1105: } alpar@1203: alpar@1105: ~Algorithm() alpar@1105: { alpar@1105: //Itt nem csinalunk semmit alpar@1105: } alpar@1105: }; alpar@1105: alpar@1203: ///\e alpar@1203: alpar@1203: ///\e alpar@1203: /// 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@1203: a.run(); alpar@1105: alpar@1203: // Algorithm<>::_SetAdat b; b=b;//Ez itt nem az, amit szeretnenk!!! alpar@1203: // // b.run(); alpar@1203: alpar@1203: Algorithm<>::SetAdat c; //Algorithm<>::Adat c; jobb vo'na alpar@1203: c.run(); alpar@1105: alpar@1105: algorithm().run(); alpar@1105: algorithm().setAdat(5.2).run(); alpar@1105: }