为什么没有std等效的boost :: enable_if?

时间:2017-06-13 08:55:58

标签: 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后缀)的原因。

为什么标准库中没有等效文件?

1 个答案:

答案 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成员的内容。