理解 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中文網其他相關文章!