7

私は用語を読み続けます:

  1. テンプレートプログラミング
  2. 汎用プログラミング
  3. メタプログラミング
  4. 多分別のイディオム/用語..

テンプレートを使用するすべての C++ コードについて、これの正しい用語またはより正確な用語はどれですか?

4

2 に答える 2

15

私の知る限り:

  1. テンプレートプログラミングは、古典的な「テンプレートを使用したプログラミング」、つまり「任意の型で使用できるようにしたい関数/クラスを持っているので、それをテンプレートにします」を参照しているだけです。

    また、テンプレートを使用するプログラミング手法をすべて含む「包括的な」カテゴリと見なすこともできます。

  2. ジェネリック プログラミングは、STL で使用されるプログラミング パラダイムとして総合的に説明できます。

    ウィキペディアはそれを次のように定義しています

    パラメーターとして提供される特定の型に必要なときにインスタンス化される、後で指定される型に関してアルゴリズムが記述されるコンピューター プログラミングのスタイル

    私見ですが、すべてのコンテナーは (型の安全性を犠牲にすることなく) 任意の型で使用できるように設計されており、アルゴリズムは任意のコンテナー型で動作するように十分に汎用的に設計されていると言ったほうがよいでしょう (それらを使用することが賢明である限り、明らかに、つまり、順序付けされていないコンテナーをソートしても意味がありません)。

    ジェネリック プログラミング(この定義による) はテンプレートの使用を厳密に必要としないことに注意してください。実際には、継承と動的ポリモーフィズムによって実現できます ( Ben Voigt のおかげです)。

    一般に、テンプレート プログラミングジェネリック プログラミングは部分的に重なっており、多くの人がジェネリック プログラミングテンプレート プログラミングという用語を同じ意味で使用しています。

  3. テンプレート メタプログラミングは、テンプレートを使用して、通常はテンプレートなしでは実行できないコンパイル時の計算/決定/チェック (静的アサーション、コンパイル時の定数計算など) を実行するプログラミング スタイルです。

    C++ はこのスタイルのプログラミング用に設計されていないため (これは後で実際に「発見」されました)、このようなコードは非常に不自然であることが多く、C++ プログラマーには馴染みがないように見えるかもしれません。そのため) C++ で通常使用される命令型パラダイムに従う代わりに。

于 2010-12-19T15:43:49.007 に答える
2

通常、ジェネリック プログラミングと呼ばれます。

テンプレートのメタプログラミングは、テンプレートの通常の使用とは別のものです。TMP では、型はコンパイル時に操作されます ( boost.Mplを参照)。

于 2010-12-19T15:34:47.140 に答える