我对模板专业化有点困惑。
我有 classes Vector2
,Vector3
其中有operator+=
(定义如下)。
Vector2& operator+=(const Vector2& v) {
x() += v.x(), y() += v.y();
return *this;
}
现在我想添加通用的添加行为并说如下:
template <typename V> const V operator+(const V& v1, const V& v2) {
return V(v1) += v2;
}
这编译得很好并且适用于Vector2
和Vector3
。但是假设我想为我的“+”操作稍微高效一些,Vector2
并且我希望它按照以下方式运行(使用模板专业化):
template<> const Vector2 operator+(const Vector2& v1, const Vector2& v2) {
return Vector2(v1.x() + v2.x(), v1.y() + v2.y());
}
这对我来说看起来不错,但不幸的是,将这两个代码块放在一起会使代码编译失败
(链接器说错误LNK2005: "Vector2 const operator+<Vector2>(Vector2 const &,Vector2 const &)" (??$?HVVector2@core@lf@@@core@lf@@YA?BVVector2@01@ABV201@0@Z) already defined in ...
)
我的错误是什么,我哪里出错了?
谢谢你。