テンプレートメタプログラミング

tmp.png

メタプログラミング
コンパイラがテンプレートを使って一時的ソースコードを生成し、それを他のソースコードと結合してコンパイルする方式
テンプレートが出力するもの

  • コンパイル時の定数
  • データ構造
  • 関数定義

特徴

  • static const intまたはstatic unsigned const以外の変数を使うことは許されない。
  • for文は使えない。

利点

  • どうも再帰の時に便利なようだ。
  • ループを展開してくれる->速くなる
  • 普通は実行時に発見されるエラーをコンパイル時に見つけることができる。(by Effective C++
  • 実行可能コードが小さくなる。
  • 実行時間が短くなる。
  • メモリの要求が少なくなる。(by Effective C++

欠点

  • ただしコンパイル時間は長くなる
  • 可読性が低い
  • テンプレートメタ用の関数の中身にはprintfをかけないから、何が起こってるのかデバッグしにくい。

A gentle introduction to Template Metaprogramming with C++
ただのテンプレートとの違い、<>の中がtypenameじゃなくて引数みたいになってること?

template<int B, int N>
struct Pow {
  // 再帰呼び出しと再結合
  static const int value = B * Pow<B, N - 1>::value;
};
 
template<int B>
struct Pow<B, 0> {  // 終了条件、''N == 0''
  static const int value = 1;
};
int quartic_of_three = Pow<3, 4>::value;


この本読んでるけど難しすぎ!!executableな例で説明してほしいもんだ。

関連エラー

List of pages tagged with tmp:

サポートサイト Wikidot.com