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>
關鍵是只有當條件為 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>
std::enable_if 用於有條件地定義函數的回傳類型,如果條件滿足會導致編譯錯誤false。
在程式碼片段中:
<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
注意:在 C 14 中,enable_if_t 是一種已定義的類型,為了清晰起見,應該使用它。因此,回傳類型可以壓縮為 std::enable_if_t<:numeric_limits>::is_integer>。在舊版的 Visual Studio 中,不支援預設範本參數,因此 std::enable_if 只能在函數傳回上使用,如「std::numeric_limits 作為條件」範例所示。
以上是`std::enable_if` 如何幫助有條件地定義函數傳回類型並啟用函數解析?的詳細內容。更多資訊請關注PHP中文網其他相關文章!