C でのテンプレート テンプレート パラメーターの使用
a() や b() などの複数の関数があるシナリオを考えてみましょう。異なる内部実装で同様のタスクを実行します。コードの冗長性を避けるために、テンプレートを使用して汎用関数を作成できます。ただし、a() と b() 自体がジェネリックである場合、外側の関数をテンプレートとして実装するだけでは十分ではない可能性があります。
このコンテキストでは、テンプレート テンプレート パラメーターを使用できます。通常、テンプレートは型、テンプレート型パラメータ、または値を受け入れますが、インスタンス化が必要なため、テンプレート テンプレート関数を型として直接渡すことはできません。
これを克服するには、ダミー構造を使用する回避策を使用できます。
<code class="cpp">template <typename T> struct a { static void foo() {} }; template <typename T> struct b { static void foo() {} };</code>
これらの構造は、テンプレート テンプレート パラメーターのプレースホルダーとして機能します。関数自体は次のようになります。
<code class="cpp">template <template <typename P> class T> void function() { T<SomeObj>::foo(); T<SomeOtherObj>::foo(); }</code>
これで、適切なダミー構造テンプレートを渡すことで、foo() のさまざまな実装で汎用関数を使用できるようになります。
<code class="cpp">int main() { function<a>(); function<b>(); }</code>
一方、関数ポインターはこの特定のシナリオではより簡単な回避策であり、テンプレート テンプレート パラメーターは、複数の実装で汎用的な機能を必要とする問題に対して、より一般的な解決策を提供します。
以上がテンプレート テンプレート パラメーターを使用して、複数の実装を持つ汎用関数を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。