理解 std::enable_if:破译其目的和实现
虽然 std::enable_if 的本质是在某些上下文中掌握的,但它的错综复杂的问题,特别是模板语句中的第二个参数和对 std::enable_if 的赋值,仍然是个谜。深入研究其工作原理将解开这些谜团。
std::enable_if 的要点
std::enable_if 是一个专门的模板,定义如下:
template struct enable_if {};
template struct enable_if { typedef T type; };
至关重要的是,类型别名 typedef T 类型仅在 Cond 为 true 时定义。
揭示用法
考虑以下声明:
template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
这里,foo的返回类型由std::enable_if<:numeric_limits>::is_integer, void>::type定义。由于 std::numeric_limits
澄清第二个参数
表示法中:
template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }
= 0 用于默认第二个模板参数。这允许使用 foo
值得注意的详细信息
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3