也许不太实用,但还是很有趣。
有一些关于矩阵乘法的抽象问题,我很快实现了一个矩阵,然后测试我的假设。
在这里,我注意到,如果我偶尔想用它加上十进制或双数,那么只使用int矩阵就不好了。当然,我可以试着把所有的东西都投到两倍,但这不方便。
继续假设我们可以有一堆可以加和乘的对象--为什么不在我的矩阵中使用它们呢?
所以,在考虑到它将是一个矩阵类之后,我现在面对的是泛型T不能被使用,我需要它来支持一些可以加和乘的接口。
问题是我可以在我的类中覆盖操作符,但是我不能引入一个支持操作符的接口。我有一个内置类型的操作符,但仍然没有接口。
在这种情况下,考虑到您不想复制工人类主体,您会做什么?包装和隐式铸造对我帮助不大,我对一个漂亮的解决方案很感兴趣。
谢谢。
发布于 2008-10-03 11:12:29
为此,你需要通用数学。幸运的是我做过这件事。用法将类似于这种“复杂”(即x+iy) 示例。操作符类现在是MiscUtil的一部分。
发布于 2008-10-03 19:33:38
嗯,有一种技术含量较低的方法可以做到这一点。您不能为"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;
}
}https://stackoverflow.com/questions/166360
复制相似问题