ホームページ > バックエンド開発 > C++ > std::enable_if は条件付き戻り値の型とテンプレート パラメーターをどのように処理しますか?

std::enable_if は条件付き戻り値の型とテンプレート パラメーターをどのように処理しますか?

Mary-Kate Olsen
リリース: 2024-11-05 21:26:02
オリジナル
1006 人が閲覧しました

How Does std::enable_if Work with Conditional Return Types and Template Parameters?

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(1);.

以上がstd::enable_if は条件付き戻り値の型とテンプレート パラメーターをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート