【发布时间】:2011-08-24 11:12:41
【问题描述】:
说我有:
public class Matrix<T>
{
T[][] values;
...
}
我想添加一个 + 运算符,它可以处理 int、long、float 和 double 或任何其他类型,为 T 实现了 + 运算符。
例如(这不起作用但传达了我想要做的事情):
public class Matrix<T>
{
T[][] values;
...
public static Matrix<T> operator +(Matrix<T> A, Matrix<T> B)
{
values = ...;
for (int row = 0; row < rowCount; ++row)
{
for (int col = 0; col < colCount; ++col)
{
values[row][col] = A.values[row][col] + B.values[row][col];
}
}
}
}
理想情况下,我想要一种方法将 T 限制为仅定义了 + 运算符以获取编译时错误但运行时异常失败的类型。
另外我想添加从Matrix<float>到Matrix<double>的隐式转换,但是这些不能在Matrix<T>类中定义,无论如何?
我知道 T4 模板可用于为每种类型生成一个矩阵,但是需要事先指定类型,我希望这适用于定义运算符的任何类型。
【问题讨论】:
-
不幸的是,像任何其他静态函数一样,您不能在泛型类中调用重载运算符。恐怕 T4 会是你最好的选择。
标签: c# generics operator-overloading