理解 std::enable_if:破译其目的和实现
虽然 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 类型仅在 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>
这里,foo的返回类型由std::enable_if<:numeric_limits>::is_integer, void>::type定义。由于 std::numeric_limits
澄清第二个参数
符号中:
<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
值得注意的细节
以上是`std::enable_if` 如何工作:揭开其实现和使用的神秘面纱?的详细内容。更多信息请关注PHP中文网其他相关文章!