gpt4 book ai didi

c++ - 半泛型函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:48 24 4
gpt4 key购买 nike

我有一堆重载函数,它们对某些数据类型(如 int、double 和字符串)进行操作。大多数这些函数执行相同的操作,其中只允许一组特定的数据类型。这意味着我无法创建简单的通用模板函数,因为我失去了类型安全性(并可能导致函数内验证的运行时问题)。

是否可以创建“半通用编译时类型安全函数”?如果是这样,如何?如果不是,这会出现在 C++0x 中吗?

一个(无效的)想法;

template <typename T, restrict: int, std::string >
void foo(T bar);
...
foo((int)0); // OK
foo((std::string)"foobar"); // OK
foo((double)0.0); // Compile Error

注意:我意识到我可以创建一个具有重载构造函数和赋值运算符的类,并将该类的变量传递给函数。

最佳答案

使用sfinae

template<typename> struct restrict { };
template<> struct restrict<string> { typedef void type; };
template<> struct restrict<int> { typedef void type; };

template <typename T>
typename restrict<T>::type foo(T bar);

对于 Tfoo 将只能接受 stringint。如果您调用 foo(0.f),则不会发生硬编译时错误,但如果有另一个函数接受该参数,则取而代之。

关于c++ - 半泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534507/

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