Heaven's Kitchen

○ テンプレートメタプログラ厶

C++のテンプレートを使ったプログラミング。

階乗計算は、実行時にループや再帰を使って求めるのが普通だと思いますが、コンパイル時に再帰式の展開が終わっているというのがこちら。

#include <iostream>

template<int N>
class Factorial {
public:
  static const int value = N * Factorial<N-1>::value;
};

template<>
class Factorial<1> {
public:
  static const int value = 1;
};

int main()
{
  std::cout << Factorial<10>::value << std::endl;
  return 0;
}

参考URL http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html

このURLにあるコードそのままだと微妙にエラーがでる。あとenumを使わなくてもstatic constな定数で行ける気がする。好みの問題かもしれないけど。

こんなことやるぐらいなら、素直にschemeとか使った方がいいような気もする…。

Valid XHTML 1.0! Valid CSS!