在 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/