ホームページ >バックエンド開発 >C++ >テンプレート テンプレート パラメーターを使用して、複数の実装を持つ汎用関数を作成するにはどうすればよいですか?

テンプレート テンプレート パラメーターを使用して、複数の実装を持つ汎用関数を作成するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-03 05:54:30415ブラウズ

How can Template Template Parameters be Used to Create Generic Functions with Multiple Implementations?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。