c++11 - 为什么没有标准的 boost::enable_if 等价物?

标签 c++11 boost stl template-meta-programming enable-if

在 C++11 中,std::enable_if被添加到标准库中。相当于boost::enable_if_c其条件为 bool .这适用于相当简单的条件,但是只要您使用将结果保存在 value 中的谓词。常量,你必须使用更详细的结构 my_predicate<MyArgs>::value把它变成bool . 这正是boost::enable_if (不带 _c 后缀)专为。

为什么标准库中没有等价物?

最佳答案

标准库在这里走了一条不同的路。 C++17 为所有返回 ::value 的类型特性添加了变量模板快捷方式。模式总是

template <typename... Args>
some_trait_v = some_trait<Args...>::value;

例如你可以写

std::enable_if<std::is_same_v<T1,T2>>

此外,enable_if 的参数可能是 constexpr 表达式的结果,例如

std::enable_if<some_constexpr_function<T1,T2>()>

这种方式更通用,不依赖于传递必须具有 value 成员的内容。

关于c++11 - 为什么没有标准的 boost::enable_if 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44516718/

相关文章:

c++ - 可以使用 realloc 安全地重新分配普通可复制对象的存储吗?

c++ - boost spirit 解析

c++ - 为类的 AllocatorAwareContainer 数据成员使用自定义分配器

c++ - 为什么空 vector 会调用值类型的默认构造函数?

C++11 多线程在神经网络中的性能非常低

c++ - 如何在派生类数据中使用基类进行比较

c++ - boost karma - 从一个属性生成多个字符串

c++ - Boost Asio - 使用 shared_ptr 处理解析器和套接字

C++ A *优先级队列的集合与 vector +堆操作

C++11嵌套宏调用?