November 10, 2006
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とか使った方がいいような気もする…。
