Bonjour,
J'ai une classe templatée PointT héritant d'une classe abstraite Point.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Point { public: Point() { } public: virtual void ToString() = 0; };J'arrive à faire des choses comme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 template<typename T> class PointT : public Point { public: T x; T y; public: PointT() : x(0), y(0) { } public: PointT(T a, T b) : x(a), y(b) { } public: PointT<T> & operator = (PointT<T> & point) { this->x = point.x; this->y = point.y; return *this; } public: PointT<T> operator + (PointT<T> & point) { PointT<T> a; a.x = x + point.x; a.y = y + point.y; return a; } public: template<typename T2> PointT<double> operator + (PointT<T2> & point) { PointT<double> tempA = point; PointT<double> tempB = *this; return tempA + tempB; } public: template<typename T2> inline operator PointT<T2> () { return PointT<T2>( (T2)x, (T2)y ); } public: void ToString() { cout << (double)x << " " << (double)y << endl; } };
J'aimerais à présent faire la même chose directement au niveau de la classe mère, c'est à dire, additioner 2 objets de type Point et récupérer un objet de type PointT<double>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 PointT<int> a(1, 2); PointT<float> b(10.5, 11.6); PointT<double> c = a + b;
Telles que sont définies mes classes je n'y arrive pas. J'ai pensé à délocaliser mon x et mon y dans la classe mère en changeant leur type en boost::any.
Mais est-ce la bonne solution ?
Flo.
Partager