std::enable_if を理解する: その目的と実装を解読する
std::enable_if の性質は特定のコンテキストで把握されていますが、複雑さ、特にテンプレート ステートメント内の 2 番目の引数と 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 型は、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>
ここで、foo の戻り値の型は std::enable_if
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>
= 0 は、2 番目のテンプレート パラメーターのデフォルトとして使用されます。これにより、std::enable_if パラメータがデフォルトでない場合に 2 つのテンプレート パラメータが必要になるのではなく、foo
注目すべき詳細
以上が「std::enable_if」はどのように機能するか: その実装と使用法の謎を解明する?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。