|
1 ///\file |
|
2 ///Named template study |
|
3 |
|
4 ///\e |
|
5 |
|
6 ///\e |
|
7 /// |
1 class AlgorithmDefaultTypes |
8 class AlgorithmDefaultTypes |
2 { |
9 { |
3 public: |
10 public: |
|
11 ///\e |
|
12 |
|
13 ///\e |
|
14 /// |
4 typedef int Adat; |
15 typedef int Adat; |
5 }; |
16 }; |
6 |
17 |
|
18 ///\e |
|
19 |
|
20 ///\e |
|
21 /// |
7 template<class T = AlgorithmDefaultTypes> |
22 template<class T = AlgorithmDefaultTypes> |
8 class AlgorithmTypes : public T |
23 class AlgorithmTypes : public T |
9 { |
24 { |
10 public: |
25 public: |
|
26 ///\e |
|
27 |
|
28 ///\e |
|
29 /// |
11 template<class X> |
30 template<class X> |
12 class SetAdat : public T { X Adat; }; |
31 class SetAdat : public T { X Adat; }; |
13 }; |
32 }; |
14 |
33 |
|
34 ///\e |
|
35 |
|
36 ///\e |
|
37 /// |
15 template<class T = AlgorithmTypes<> > |
38 template<class T = AlgorithmTypes<> > |
16 class AlgorithmDefaultDataFields : public T |
39 class AlgorithmDefaultDataFields : public T |
17 { |
40 { |
18 protected: |
41 protected: |
|
42 ///\e |
|
43 |
|
44 ///\e |
|
45 /// |
|
46 typedef T TypeTraits; //Jo ez a nev? |
|
47 protected: |
|
48 ///\e |
|
49 |
|
50 ///\e |
|
51 /// |
19 typename T::Adat adat; |
52 typename T::Adat adat; |
20 }; |
53 }; |
21 |
54 |
|
55 ///\e |
|
56 |
|
57 ///\e |
|
58 /// |
22 template<class T = AlgorithmDefaultDataFields<> > |
59 template<class T = AlgorithmDefaultDataFields<> > |
23 class Algorithm : public T |
60 class Algorithm : public T |
24 { |
61 { |
25 int _intAdat; |
62 int _intAdat; |
26 public: |
63 public: |
29 |
66 |
30 template<class X> class _SetAdat : public T { |
67 template<class X> class _SetAdat : public T { |
31 protected: |
68 protected: |
32 X adat; |
69 X adat; |
33 public: |
70 public: |
|
71 typedef X Adat; |
34 _SetAdat() {}; //"Algorithm<>::_SetAdat<double> b;"-hez kell!!!! |
72 _SetAdat() {}; //"Algorithm<>::_SetAdat<double> b;"-hez kell!!!! |
35 // De az is rossz!!!!! |
73 // De az is rossz!!!!! |
36 _SetAdat(const T &t,const X& x) : T(t), adat(x) {}; |
74 _SetAdat(const T &t,const X& x) : T(t), adat(x) {}; |
37 }; |
75 }; |
38 |
76 |
|
77 ///\name Funtion Named Parameters |
|
78 |
|
79 ///@{ |
|
80 |
|
81 ///\e |
|
82 |
|
83 ///\e |
|
84 /// |
39 template<class X> |
85 template<class X> |
40 Algorithm<_SetAdat<X> > setAdat(const X &x) { |
86 Algorithm<_SetAdat<X> > setAdat(const X &x) { |
41 return Algorithm<_SetAdat<X> >(_SetAdat<X>(*this,x)); |
87 return Algorithm<_SetAdat<X> >(_SetAdat<X>(*this,x)); |
42 } |
88 } |
|
89 |
|
90 ///@} |
|
91 ///\name Named Parameters |
43 |
92 |
|
93 ///@{ |
|
94 |
|
95 ///\e |
|
96 |
|
97 ///\e |
|
98 /// |
|
99 template<class X> |
|
100 class SetAdat : |
|
101 public Algorithm<AlgorithmDefaultDataFields< |
|
102 typename T::TypeTraits::template SetAdat<X> > > |
|
103 {}; |
|
104 |
|
105 ///@} |
|
106 |
|
107 ///\e |
|
108 |
|
109 ///\e |
|
110 /// |
44 Algorithm &setIntAdat(int i) {_intAdat=i;return *this;} |
111 Algorithm &setIntAdat(int i) {_intAdat=i;return *this;} |
45 //vagy: |
112 //vagy: |
|
113 ///Vagy |
|
114 |
|
115 ///Vagy... |
|
116 /// |
46 Algorithm &intAdat(int i) {_intAdat=i;return *this;} |
117 Algorithm &intAdat(int i) {_intAdat=i;return *this;} |
47 |
118 |
|
119 //Maga az algoritmus!!!!!!! |
|
120 ///\e |
|
121 |
|
122 ///\e |
|
123 /// |
48 typename T::Adat run() |
124 typename T::Adat run() |
49 { |
125 { |
50 //Itt csinalunk valamit |
126 //Itt csinalunk valamit |
51 return typename T::Adat(); |
127 return adat; |
52 } |
128 } |
|
129 |
53 ~Algorithm() |
130 ~Algorithm() |
54 { |
131 { |
55 //Itt nem csinalunk semmit |
132 //Itt nem csinalunk semmit |
56 } |
133 } |
57 }; |
134 }; |
58 |
135 |
|
136 ///\e |
|
137 |
|
138 ///\e |
|
139 /// |
59 Algorithm<> algorithm() |
140 Algorithm<> algorithm() |
60 { |
141 { |
61 return Algorithm<>(); |
142 return Algorithm<>(); |
62 } |
143 } |
63 |
144 |
64 int main() |
145 int main() |
65 { |
146 { |
66 Algorithm<> a; |
147 Algorithm<> a; |
|
148 a.run(); |
67 |
149 |
68 Algorithm<>::_SetAdat<double> b; b=b;//Ez itt nem az, amit szeretnenk!!! |
150 // Algorithm<>::_SetAdat<double> b; b=b;//Ez itt nem az, amit szeretnenk!!! |
|
151 // // b.run(); |
|
152 |
|
153 Algorithm<>::SetAdat<double> c; //Algorithm<>::Adat<double> c; jobb vo'na |
|
154 c.run(); |
69 |
155 |
70 Algorithm<>::SetAdat<double> c; c=c; //Ez itt nem az, amit szeretnenk!!! |
|
71 |
|
72 a.run(); |
|
73 // b.run(); |
|
74 // c.run(); |
|
75 |
|
76 algorithm().run(); |
156 algorithm().run(); |
77 algorithm().setAdat(5.2).run(); |
157 algorithm().setAdat(5.2).run(); |
78 } |
158 } |