在C ++ 11中,std::enable_if
已添加到标准库中。它相当于boost::enable_if_c
,其条件为bool
。这适用于相当简单的条件,但只要您使用将结果保存在value
常量中的谓词,就必须使用更详细的构造my_predicate<MyArgs>::value
将其转换为bool
。
这正是boost::enable_if
(没有_c
后缀)的原因。
为什么标准库中没有等效文件?
答案 0 :(得分:3)
标准库在这里采用不同的路线。 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
成员的内容。