2006-06-30 昨日予告したように、今回からテンプレート・メタプログラミングに関する話題を取り上げていきたいと思います。C++のテンプレートは、元々は型 T のコンテナを実装する程度の用途しか想定されていなかったのでしょうが、STLやBoost C++ Librariesなどを見ても分かるように、非常に広い用途に利用されています。 今回は、テンプレート・メタプログラミングの最も基礎にあたる「メタ関数」を取り上げてみたいと思います。(メタではない)普通の関数は、引数として値を受け取り、返却値として値を返します。そして、関数として定義された内容は、実行時に解決されます。 しかし、メタ関数では、引数として型または定数値を受け取り、返却値として型または定数値を返します。そして、メタ関数として定義された内容は、コンパイル時に静的に解決されます。もちろん、メタ関数の引数や返却値というのは、普通の