如何在泛型类Matrix<T>中仅当T支持+运算符时重载该运算符?
泛型矩阵类的运算符重载问题
我定义了如下泛型矩阵类:
class Matrix<T> { private T[,] _data; }
能否仅当*泛型参数+运算符时,为Matrix<T>重载+运算符?
近期写了很多Rust代码,我原本期望以下写法可行:
class Matrix<T> { private T[,] _data; public static Matrix<T> operator+(Matrix<T> lhs, Matrix<T> rhs) where T: IAdditionOperators<T> { // ... } }
遗憾的是,where约束只能应用于方法自身的泛型参数,而非包含该方法的类的泛型参数。
我知道可以去掉where约束,在方法体内使用dynamic执行加法操作,但这种方式的性能影响不符合我的需求。
有类似场景的问题可通过C# 11中的新接口IAdditionOperators<T>解决,但我希望Matrix<T>同时也能支持未重载+运算符的T类型(允许运行时检查)。
是否可以通过子类和隐式转换来实现?
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

