我试图重载operator *来处理用不同类型实例化的类模板,但是从编译器中获取了“太多的模板参数列表”。这是我的函数实现:

template <typename T>
template <typename E>
inline Vec2<T> operator*(Vec2<T> lhs, Vec2<E>& rhs)
{
   lhs *= rhs;
   return lhs;
}

template <typename T>
template <typename E>
inline Vec2<T> operator*(Vec2<T> lhs, E scalar)
{
    lhs.x *= scalar;
    lhs.y *= scalar;
    return lhs;
}


这是用例,我将其用于:

Vec2<float> scale(0.5, 0.8);
Vec2<short> value(50, 100);

Vec2<short> result = value * scale;
// value should now equal (25, 80)

最佳答案

好吧,您使用的语法不正确。

template <typename T>
template <typename E>
//...


仅在定义模板类的模板成员时使用,而不是这种情况。就您而言,您应该只使用

template <typename T, typename E> Vec2<T> operator*(Vec2<T> lhs, Vec2<E>& rhs)

关于c++ - 重载类模板的非成员算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49244698/

10-10 11:20