为什么没有 boost::enable_if 的标准等价物?
Why is there no std equivalent of boost::enable_if?
在 C++11 中,std::enable_if
被添加到标准库中。等价于条件为bool
的boost::enable_if_c
。这适用于相当简单的条件,但是一旦您使用将结果保存在 value
常量中的谓词,您就必须使用更冗长的结构 my_predicate<MyArgs>::value
将其转换为 bool
.
这正是 boost::enable_if
(没有 _c
后缀)的目的。
为什么标准库中没有等效项?
标准库在这里走了一条不同的路。 C++17 为 return a ::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 中,std::enable_if
被添加到标准库中。等价于条件为bool
的boost::enable_if_c
。这适用于相当简单的条件,但是一旦您使用将结果保存在 value
常量中的谓词,您就必须使用更冗长的结构 my_predicate<MyArgs>::value
将其转换为 bool
.
这正是 boost::enable_if
(没有 _c
后缀)的目的。
为什么标准库中没有等效项?
标准库在这里走了一条不同的路。 C++17 为 return a ::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
成员的内容。