テンプレート メタプログラミング: テンプレート テンプレート パラメーター
テンプレート テンプレート パラメーターは C の強力な機能であり、テンプレートが他のテンプレートを参照できるようにします。ただし、その構文は混乱を招き、誤解を招く可能性があります。
シナリオ
次のコードを考えてみましょう。
<code class="cpp">template<class T> class B {}; // A templated class template<template<class X> class Z = B> // The problem is in this line class BB{};</code>
問題の行は次のとおりです。 :
<code class="cpp">template<class X> class Z = B</code>
誤解
よくある誤解の 1 つは、C が Z をテンプレート パラメーターではなく別のテンプレート クラスとして解釈する可能性があるということです。
説明
C は、テンプレート化されたクラスとテンプレート パラメーターを配置によって区別します。上記のコードの構文:
<code class="cpp">template<template<class X> class Z = B></code>
は、Z が単一の型パラメーター X を持つテンプレートを予期するテンプレート パラメーターであることを示します。等号 (=) は、B クラス テンプレートをデフォルト値として割り当てます。 for Z.
関数ポインターの類似
テンプレート テンプレート パラメーターは、関数の引数を受け入れる関数ポインターに類似しています。関数ポインターが指定された引数の型を持つ関数を受け入れるのと同じように、テンプレート テンプレート パラメーターは指定された型パラメーターを持つテンプレートを受け入れます。
使用法
テンプレート テンプレート パラメーターは、汎用性の高いコードの作成に役立ちます。 。これらを使用すると、テンプレートをパラメータとして操作し、複雑なテンプレート構造を作成できます。
たとえば、別のテンプレート テンプレート パラメータを受け取るテンプレート テンプレート パラメータを作成することができます。ただし、これは C 標準の一部ではありません。
注
テンプレート テンプレートは有効な C 構文ではないことに注意してください。上記の例は、概念の単なる仮想的な説明にすぎません。
以上がテンプレート テンプレート パラメーター: テンプレートとテンプレート パラメーターの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。