理解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,無效>::型別。由於 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中文網其他相關文章!