该文章描述了一个办法,在C#中,以允许添加这对他们定义的运算符+任意值类型.实质上它允许以下代码:
public T Add(T val1, T val2) { return val1 + val2; }
此代码无法编译,因为无法保证T类型具有"+"运算符的定义,但效果可通过以下代码实现:
public T Add(T val1, T val2) { //Numdefines a '+' operation which returns a value of type T return (new Num (val1) + new Num (val2)); }
点击链接查看Num课程如何实现这一目标.无论如何,关于这个问题.有没有办法在C或C++中实现相同的效果?对于好奇,我试图解决的问题是允许CUDA内核更灵活/更通用,允许它在更多类型上运行.
更新:对于.NET,Marc Gravell创建了一个实用程序库,可以非常优雅地解决操作员问题.
由于模板是用C++编译的,所以只需:
template < class T > T add(T const & val1, T const & val2) { return val1 + val2; }
会工作,你会得到一个编译错误的每个类型没有定义运算符+.
C++模板为每个类型实例化生成代码,因此对于每种类型,将生成正确的T代码.这样C++就不需要Num <>技巧了.
在简单的C中,据我所知,这是不可能的.