Bonjour,
J'ai une classe Point4 qui ressemble à ceci:
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:
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.
Partager