我试图重载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/