gpt4 book ai didi

c++ - 对任意值类型的操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:10 27 4
gpt4 key购买 nike

article描述了一种在 C# 中允许添加任意值类型的方法,这些值类型具有为其定义的 + 运算符。本质上它允许以下代码:

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

此代码无法编译,因为不能保证 T 类型具有“+”运算符的定义,但效果是通过如下代码实现的:

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

点击链接查看 Num 类如何实现这一点。无论如何,关于这个问题。有什么方法可以在 C 或 C++ 中实现相同的效果吗?出于好奇,我试图解决的问题是允许 CUDA 内核在更多类型上运行,从而使其更加灵活/通用。

更新:对于 .NET,Marc Gravell 制作了一个 utility library非常优雅地解决了算子问题。

最佳答案

由于模板在 C++ 中的编译方式,只需执行以下操作:

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

将起作用,对于未定义 operator+ 的每种类型,您都会收到编译错误。

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

据我所知,在纯 C 中这是不可能的。

关于c++ - 对任意值类型的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/221950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com