在使用c++11的VS2012中,为什么会这样编译:
template <typename T>
class Vector2
{
public:
Vector2(); //constructors
T Dot(const Vector2<T>& U, const Vector2<T>& V);
};
template <typename T>
inline T Vector2<T>::Dot(const Vector2<T>& U, const Vector2<T>& V) //ISSUE
{ return (U.x * V.x + U.y * V.y); }
但这不会:
template <typename T>
class Vector2
{
public:
Vector2(); //constructors
template<typename G>
G Dot(const Vector2<G>& U, const Vector2<G>& V);
};
template <typename G>
inline G Vector2<G>::Dot(const Vector2<G>& U, const Vector2<G>& V) //ISSUE
{ return (U.x * V.x + U.y * V.y); }
第二个导致错误:“无法将函数定义与现有声明匹配”
我意识到我不必为后面的模板函数定义使用 G,我只是使用它来与第二个示例声明保持一致。
您是否不允许在模板类中拥有与该类不同类型的函数?我非常有兴趣找出这里发生的事情以及我可以从这个错误中学到的与模板相关的任何内容。