Yip*_*Yay 4 c++ templates specialization
我对模板专业化略有困惑.
我有类Vector2,Vector3其中包含operator+=(以下面的方式定义).
Vector2& operator+=(const Vector2& v) {
x() += v.x(), y() += v.y();
return *this;
}
Run Code Online (Sandbox Code Playgroud)
现在我想添加泛型添加行为并说出如下内容:
template <typename V> const V operator+(const V& v1, const V& v2) {
return V(v1) += v2;
}
Run Code Online (Sandbox Code Playgroud)
这编译很好,适用于Vector2和Vector3.但是,假设我想为我做一个稍微高效的"+"操作,我Vector2希望它采用以下方式(使用模板特化):
template<> const Vector2 operator+(const Vector2& v1, const Vector2& v2) {
return Vector2(v1.x() + v2.x(), v1.y() + v2.y());
}
Run Code Online (Sandbox Code Playgroud)
这看起来很好,但遗憾的是,将这两个代码块放在一起使得代码无法编译
(链接器说错误LNK2005: "Vector2 const operator+<Vector2>(Vector2 const &,Vector2 const &)" (??$?HVVector2@core@lf@@@core@lf@@YA?BVVector2@01@ABV201@0@Z) already defined in ...)
我的错误是什么,我哪里出错了?
谢谢.
如果特化是在头文件中,那么您需要声明它inline以允许它包含在多个编译单元中.
请注意,您实际上并不需要模板专业化; 一个简单的重载将做同样的事情.
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |