可能重复: 定义实现+运算符的泛型
最近,我正在开发一个实现算法的C#类库。关键是,我希望库的用户能够选择算法应该使用的机器精度(单精度或双精度),我正在尝试使用泛型。因此,例如:
Algorithm<double> a = new Algorithm<double>();
/** Some initializations here */
double result = a.Solve();或
Algorithm<float> a = new Algorithm<float>();
/** Some initializations here */
float result = a.Solve();因此,泛型类的类型参数意味着是一个十进制数(因为在算法代码中,我需要使用+、*、/、-),但是我不知道对它施加哪种类型约束。我考虑过与所有操作符建立一个接口,但不幸的是,这是不允许的。有什么想法吗?
否则,是否有可能在C#中获得类似于C++中的模板专业化的东西?
谢谢
托马索
发布于 2010-09-07 18:33:11
这通常是一个严重的错误,但您可以为数字类型创建一个通用的“包装器”类,该类公开所需的操作,并防止使用不受支持的值类型(即char)实例化,然后指定算法的泛型类型参数必须是包装类。
除了代码复制之外,我喜欢Floste在各个方面的解决方案。您甚至可以简化它;指定私有方法重载,然后一个简单调用私有方法的公共泛型方法,运行时将选择正确的方法(确保包含抛出NotImplementedException的catch-all )。
https://stackoverflow.com/questions/3652053
复制相似问题