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

Chr*_*ier 3 boost stl enable-if template-meta-programming c++11

在 C++11 中,std::enable_if被添加到标准库中。它相当于boost::enable_if_c其条件为 a bool。这适用于相当简单的条件,但是一旦您使用将结果保持为value常量的谓词,您就必须使用更详细的构造my_predicate<MyArgs>::value将其转换为bool. 这正是boost::enable_if(无_c后缀)的目的。

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

And*_*ner 5

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

template <typename... Args>
some_trait_v = some_trait<Args...>::value;
Run Code Online (Sandbox Code Playgroud)

例如你可以写

std::enable_if<std::is_same_v<T1,T2>>
Run Code Online (Sandbox Code Playgroud)

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

std::enable_if<some_constexpr_function<T1,T2>()>
Run Code Online (Sandbox Code Playgroud)

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