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>
2 番目のテンプレート パラメーターのデフォルト値 (0) は、呼び出し foo
注: C 14 では、enable_if_t は定義された型であり、わかりやすくするために使用する必要があります。したがって、戻り値の型は std::enable_if_t
以上が`std::enable_if` は関数の戻り値の型を条件付きで定義し、関数の解決を有効にするのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。