理解 std::enable_if
理解 std::enable_if 需要掌握替换失败不是错误。
std::enable_if 的定义
std::enable_if 是一个专门的模板,定义为:
<code class="cpp">template<bool Cond, class T = void> struct enable_if {}; template<class T> struct enable_if<true, T> { typedef T type; };</code>
至关重要的是, typedef T 类型定义仅在以下情况下才会触发bool Cond 为 true。
条件返回类型中的用法
考虑示例:
<code class="cpp">template<typename T> typename std::enable_if<std::numeric_limits<T>::is_integer, void>::type foo(const T &bar) { isInt(bar); }</code>
这里,返回类型定义如下:
<code class="cpp">std::enable_if<std::numeric_limits<T>::is_integer, void>::type</code>
enable_if 的使用确保仅当 T 的 is_integer 为 true 时 foo 才具有有效的返回类型。
默认第二个模板参数
在示例中:
<code class="cpp">template<typename T, typename std::enable_if<std::is_integral<T>::value, int>::type = 0> void foo(const T& bar) { isInt(); }</code>
第二个模板参数默认为 0。这允许使用单个模板参数调用 foo,例如foo
以上是std::enable_if 如何使用条件返回类型和模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!