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;
};
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'arrive à faire des choses comme

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;
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>.

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.