プログラミング的な何か

たまにはプログラミングな話題も書かないとただのわら日記なので書こう。

とりあえず最近知った(存在自体は前から知ってたけど)技術というか技法として、テンプレートを利用したコンパイル時計算ってのがちょっと面白いです。いわるゆテンプレートメタプログラミングってやつでしょうか?こんな感じ。

#include	

template 
struct factorial {
	enum {
		value = factorial::value * n
	};
};

template <>
struct factorial<0> {
	enum {
		value = 1
	};
};

int main() {
	printf("%d \n", factorial<10>::value);

	return 0;
}

コード自体はどこかのサンプルをちょこちょこっといじっただけですが・・・。階乗を計算してくれます。こいつのいいところはコンパイル時に定数としておいてくれるってところですかね。再帰的に処理している部分で、0になったらvalueを1にして打ち切るってのがコンパイラ制作のときの例外記法っぽくておもしろいような。