Je suis légèrement confus avec la spécialisation de modèle. J'ai les classes Vector2
, Vector3
qui ont operator+=
(qui sont définies de la manière suivante).Question de modèle de base C++
Vector2& operator+=(const Vector2& v) {
x() += v.x(), y() += v.y();
return *this;
}
Maintenant, je veux ajouter le comportement de plus générique et dire quelque chose comme:
template <typename V> const V operator+(const V& v1, const V& v2) {
return V(v1) += v2;
}
Cette compile bien et fonctionne à la fois Vector2
et Vector3
. Mais disons que je veux avoir un peu plus efficace opération « + » pour mon Vector2
et je veux d'agir de la manière suivante (en utilisant la spécialisation du modèle):
template<> const Vector2 operator+(const Vector2& v1, const Vector2& v2) {
return Vector2(v1.x() + v2.x(), v1.y() + v2.y());
}
Cela semble bien pour moi, mais malheureusement placer ces deux morceaux de code juste après l'autre rend le code échouer la compilation
(linker dit erreur LNK2005: "Vector2 const operator+<Vector2>(Vector2 const &,Vector2 const &)" ([email protected]@[email protected]@@[email protected]@@[email protected]@[email protected]@Z) already defined in ...
)
Quel est mon erreur et d Je vais mal?
Merci.
Une surcharge serait toujours une meilleure alternative. –