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 is 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 が有効な戻り型を持つことが保証されます。
2 番目のテンプレート パラメータのデフォルト設定
例:
<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>
2 番目のテンプレート パラメーターはデフォルトで 0 に設定されています。これにより、単一のテンプレート パラメーターを使用して foo を呼び出すことができます。 foo
以上がstd::enable_if は条件付き戻り値の型とテンプレート パラメーターをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。