当前位置:  开发笔记 > 编程语言 > 正文

对任意值类型的操作

如何解决《对任意值类型的操作》经验,为你挑选了1个好方法。

该文章描述了一个办法,在C#中,以允许添加这对他们定义的运算符+任意值类型.实质上它允许以下代码:

public T Add(T val1, T val2)
{
   return val1 + val2;
}

此代码无法编译,因为无法保证T类型具有"+"运算符的定义,但效果可通过以下代码实现:

public T Add(T val1, T val2)
{
   //Num defines a '+' operation which returns a value of type T
   return (new Num(val1) + new Num(val2));
}

点击链接查看Num课程如何实现这一目标.无论如何,关于这个问题.有没有办法在C或C++中实现相同的效果?对于好奇,我试图解决的问题是允许CUDA内核更灵活/更通用,允许它在更多类型上运行.

更新:对于.NET,Marc Gravell创建了一个实用程序库,可以非常优雅地解决操作员问题.



1> Pieter..:

由于模板是用C++编译的,所以只需:

template < class T >
T add(T const & val1, T const & val2)
{
    return val1 + val2;
}

会工作,你会得到一个编译错误的每个类型没有定义运算符+.

C++模板为每个类型实例化生成代码,因此对于每种类型,将生成正确的T代码.这样C++就不需要Num <>技巧了.

在简单的C中,据我所知,这是不可能的.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有