テンプレート引数としてのテンプレート関数の説明
C では、関数ポインターまたはテンプレートを使用して汎用プログラミングを実現できます。テンプレートを使用すると、コンパイラーが関数をインライン化できるため効率が向上し、パフォーマンスが向上します。
2 つの関数 a と b が、若干の違いはあるものの同様の操作を実行するシナリオを考えてみましょう。コードの重複を避けるために、テンプレートを使用して汎用関数を定義できます。
<code class="c++">template<void (*param)(int)> void function() { param(123); param(456); }</code>
このテンプレートは関数ポインターを引数として受け取り、実行する特定の関数を実行時に選択できるようにします。この例では、 function<>
テンプレート引数を持つテンプレート関数
ただし、a と b 自体がジェネリック関数である場合には制限が生じます。テンプレート パラメーターは型、テンプレート タイプ、値のいずれかになりますが、引数としてテンプレート関数を渡すことを直接サポートするものはありません。
この課題を克服するには、「テンプレート テンプレート パラメーター」を使用できます。ただし、テンプレート関数を型として使用するにはインスタンス化が必要なため、実用的ではありません。回避策には、ダミー構造体の使用が含まれます。
<code class="c++">struct a { static void foo () {}; }; struct b { static void foo () {}; }; template <template <typename P> class T> void function () { T<SomeObj>::foo (); T<SomeOtherObj>::foo (); } int main () { function<a>(); function<b>(); }</code>
この例では、a と b は構造体内の静的メンバー関数としてカプセル化されています。関数
したがって、このアプローチにより、テンプレート関数を引数として受け入れることができるジェネリック関数を定義でき、C ジェネリックで柔軟で再利用可能なコードが可能になります。
以上がC でテンプレート関数を引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。