std::enable_if を理解する: その目的と実装を解読する
std::enable_if の性質は特定のコンテキストで把握されていますが、複雑な部分、特に 2 番目の引数とテンプレート ステートメント内の std::enable_if への代入はそのまま残ります。謎めいた。その仕組みを深く掘り下げると、これらの謎が解明されます。
std::enable_if の要点
std::enable_if は、次のように定義された特殊なテンプレートです:
template struct enable_if {};
template struct enable_if { typedef T type; };
重要なことに、型エイリアスの typedef T 型は、Cond が true の場合にのみ定義されます。
使用法の公開
次の宣言を考えてみましょう。
template
typename std::enable_if<:numeric_limits>::is_integer, void>::type foo(const T &bar) { isInt(bar); }
ここで、foo の戻り値の型は std::enable_if<:numeric_limits>::is_integer, void>::type で定義されます。 std::numeric_limits
2 番目の引数の明確化
表記法:
template::value, int>::type = 0>
void foo(const T& bar) { isInt(); }
= 0 は、2 番目のテンプレート パラメーターのデフォルトとして使用されます。これにより、std::enable_if パラメータがデフォルトでない場合に 2 つのテンプレート パラメータが必要になるのではなく、foo
注目すべき詳細
]免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3