我對模板專業化略有困惑。C++基本模板問題
我有類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 &)" ([email protected]@[email protected]@@[email protected]@@[email protected]@[email protected]@Z) already defined in ...
)
什麼是我的錯誤,其中d我出錯了?
謝謝。
過載將永遠是一個更好的選擇。 – 2010-07-15 12:13:32