テンプレート テンプレート パラメーター: 謎を明らかにする
テンプレート プログラミングの領域では、テンプレート テンプレート パラメーターの概念は謎のように思えるかもしれません。これらを理解しようとすると、複雑なパズルに巻き込まれたような、途方に暮れた気分になるかもしれません。
次のコード スニペットに遭遇したと想像してください:
<code class="cpp">template<template<class X> class Z = B> class BB{};</code>
ここでは、テンプレート クラスのパラメーター リストを示します。 BB には次の行が含まれています:
<code class="cpp">template<class X> class Z = B</code>
問題は、パラメーター リスト内に表示される Z (つまり、テンプレート テンプレート パラメーター) と、テンプレートによって定義された仮想クラス Z を区別することにあります。
違いを理解する
テンプレート テンプレート パラメーターは通常のテンプレート タイプ パラメーターに似ていますが、具体的なタイプではなくテンプレートが含まれます。
たとえば、次のことを考慮してください。 code:
<code class="cpp">template <typename Type> class Foo { Type m_member; }; template <template <typename Type> class TemplateType> class Bar { TemplateType<int> m_ints; };</code>
ここで、Foo は型パラメータを受け入れる単純なテンプレート クラスであり、Bar は型パラメータを取るテンプレートを受け入れるテンプレート クラスです。
関数ポインタに相当
テンプレート テンプレート パラメータは関数ポインタに類似しています。通常の関数は、通常のテンプレートが型を受け入れるのと同様に、値のような引数を受け入れます。ただし、型を受け入れるテンプレートを受け入れるテンプレート テンプレートと同様に、値のような引数を受け取る関数ポインタを受け入れる高階関数もあります。
テンプレート テンプレート テンプレートが不可能な理由
テンプレート テンプレートは確かに存在しますが、テンプレート テンプレートは C では有効な概念ではありません。標準化委員会は、実装上の懸念から、テンプレートの再帰を 1 つのレベルに制限することを意図的に選択しました。ただし、この決定は、将来的にそれらを導入する可能性を妨げるものではありません。
こじつけだが興味深いアプリケーション
実際にはまれですが、テンプレート テンプレートには潜在的な可能性があります。使用例。そのような例の 1 つは、グラフ検索のための非常に汎用的なアルゴリズムの設計にあります。このアルゴリズムは、スタックやキューなどの汎用データ構造上で動作し、基礎となるさまざまな実装コンテナーに対応するように作成できます。これにより、次のような型置換によるカスタム グラフ検索アルゴリズムの作成が可能になります。
<code class="cpp">search<Stack, Vector>( myGraph ); // DFS search<Queue, Deque>( myGraph ); // BFS</code>
結論
テンプレート テンプレート パラメーターを理解するには、視点をテンプレートに移す必要があります。高次の構成要素として。これらは頻繁には発生しないかもしれませんが、複雑なプログラミング問題に対する高度なソリューションを設計するための非常に高い柔軟性を提供します。
以上がテンプレート テンプレート パラメーターとは何ですか? テンプレート テンプレート テンプレートが C で使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。