2

也许不太实用,但仍然很有趣。

有一些关于矩阵乘法的抽象问题,我很快就为整数实现了一个矩阵,然后测试了我的假设。

在这里我注意到,如果我偶尔想将它与十进制或双精度一起使用,那么仅 int 矩阵并不好。当然,我可以尝试将 all 转换为 double,但这并不方便。

继续假设我们可以拥有一堆可以相加和相乘的对象——为什么不在我的矩阵中使用它们呢?

因此,在考虑它是一个 Matrix 类之后,我现在面临无法使用泛型 T 的问题,我需要它来支持一些可以加法和乘法的接口。

问题是我可以在我的类中覆盖运算符,但我无法引入支持运算符的接口。而且我有一个内置类型的运算符,但仍然没有它们的接口。

考虑到您不想复制工人阶级主体,在这种情况下您会怎么做?包装器和隐式转换对我没有多大帮助,我对一个漂亮的解决方案很感兴趣。

谢谢。

4

2 回答 2

5

为此,您需要通用数学。幸运的是我已经做到了。用法类似于此“复杂”(即 x+iy)示例。Operator 类现在是MiscUtil的一部分。

于 2008-10-03T11:12:29.307 回答
2

好吧,有一种技术含量较低的方法可以做到这一点。您不能为“int”或“double”添加新接口。但是您可以为一个对象声明一个接口,该接口可以乘以和添加某些泛型类型的值。然后你可以为你需要的所有类型实现接口:

public interface ICalculator<T>
{

   T Add(T x, T y);
   T Multiply(T x, T y);

}

public class MatrixMultiplier<T>
{

  public MatrixMultiplier(ICalculator<T> calculator) { ... }

}

public class IntCalculator : ICalculator<int>
{

  public int Add(int x, int y)
  {
    return x + y;
  }

  public int Multiply(int x, int y)
  {
    return x * y;
  }

}
于 2008-10-03T19:33:38.427 回答