【发布时间】:2016-06-10 06:47:10
【问题描述】:
我正在尝试创建坐标是通用的二维向量(Vector2Dint、Vector2Dfloat 等),以便能够更轻松地进行一些数学运算。我已经看到这个问题非常接近我的问题:Can't operator == be applied to generic types in C#? 但我的情况是使用“*”运算符。基本上我需要为这个向量做一些数学函数,比如“cross”或“dot”,一个例子就是这个:
public static T cross<T>(Vec2<T> u, Vec2<T> v)
{
return u.x * v.y - u.y * v.x;
}
事情是 Visual Studio 告诉我的相同:“运算符 '*' 不能应用于类型 'T' 和 'T' 的操作数”(T 是坐标的类型)。我的想法是重载“Vec2”类中的“*”运算符,以便能够将这些坐标相乘,如下所示:
public static Vec2<T> operator *(T x, T y)
{
return x * y;
}
但 Visual Studio 再次告诉我同样的事情。我确定我没有以正确的方式重载运算符,但我不知道原因。感谢您的帮助
编辑 1: 好的,我们可以从中学到的是,如果您想为不同类型(int、float、double 等)定义一个函数并且想要性能,最好的方法是为每种类型定义函数,但是现在,我遇到了另一个问题。如果你有一个很长的函数或几个很长的函数,¿这仍然是最好的方法吗?
【问题讨论】:
-
你不知道 x 和 y 是什么类型,是什么让你认为他们有
*运算符? -
好吧,T 肯定是错的,如果你定义了一个 Vec2
那么你的操作符将是两个整数,你想将向量相乘,而不是两个整数,对吗? -
嗯,不完全是这样,我正在尝试创建一个函数来执行将向量的每个坐标相乘的“交叉”数学函数,这个坐标是通用的,它们是 int、float 和 double。当我尝试将坐标相乘时出现问题
标签: c# generics operators overloading