Bonjour,

J'ai une classe Point4 qui ressemble à ceci:
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
template<class T> class Point4
	{
		public:
			Point4(T Xu=0, T Yu=0, T Zu=0, T Wu=1);
			Point4(const Point4<T> &);
 
			Point4<T> operator +() const;
			Point4<T> operator -() const;
			Point4<T> operator +(const Point4<T> &) const;
			Point4<T> operator -(const Point4<T> &) const;
			const Point4<T>& operator +=(const Point4<T>& v);
			const Point4<T>& operator -=(const Point4<T>& v);
 
			//...
 
			T X, Y, Z, W;
	};
 
	template <class T> Point4<T> operator /(const Point4<T> &, T t);
J'ai ce code source:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Point4<float> pointTransformed = (getLightProjectionMatrix() * getLightViewMatrix() * Point4<float>(0.0, 0.0, -0.2, 1.0)) / 2.0f + 0.5f;
La multiplication des deux matrices avec le point fonctionne très bien ainsi que la division par 2.0f.
Par contre le "+ 0.5f" ne fonctionne pas comme je voudrais (ajouter 0.5f à X, Y, Z et W). C'est ma faute: j'ai oublié de définir l'opérateur d'addition dans ma classe Point4.

Ce que je ne comprends pas:
* Il ne râle pas à la compilation !
* Pire: Il me transforme mon " + 0.5f" par "+ Point4<float>(0.5f)" à la compilation/exécution. En effet, j'ai pu voir en debug qu'il appel le constructeur de Point4<float> avec 0.5f. Comment ose t-il appeler un constructeur sans que je lui demande ? Je trouve cela très perturbant.
Y a-t-il moyen d'empêcher cela ? Comment s'appel cette façon de faire du compileur afin de trouver plus d'info sur Internet ?

Merci d'avance.

EDIT: Oups, je voulais mettre mon message dans le forum consacré au langage C++ et pas dans Visual c++ que je n'utilise pas.