首頁  >  文章  >  後端開發  >  std::enable_if 如何使用條件回傳類型和範本參數?

std::enable_if 如何使用條件回傳類型和範本參數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-05 21:26:02928瀏覽

How Does std::enable_if Work with Conditional Return Types and Template Parameters?

理解 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(1);.

以上是std::enable_if 如何使用條件回傳類型和範本參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn