メタプログラミングはコンパイル時にのみ知られている入力のために動作しますので。だから、コンパイル時に知られている一定の与えられたフィボナッチ数を計算メタ関数持つことができます。
int value = Fibonacci<5>::Value;
をしかし、それは、実行時にユーザーによって入力された値のために動作しません。
int input = GetUserInput();
int value = Fibonacci<input>::Value; // Does not compile
確かに、新しい値を得るたびにプログラムを再コンパイルすることはできますが、それは重要ではないプログラムにとっては実用的ではありません。
C++でのメタプログラミングは、基本的にC++でテンプレートを処理する方法の「有用な偶発的な悪用」であることに注意してください。テンプレートのメタプログラミングは確かにではありませんでした。 C++標準よりも前にC++標準を作成する際にC++標準委員会が念頭に置いていたことは何ですか?内部コンパイラエラー(これは最近では新しいコンパイラで変更されましたが、あなたはまだ外に出てはいけません)が得られるまで、コンパイラをあまりにも多く押し込むことができます。
実際に何が役に立つのかを知りたい場合は、先進的な本dedicated to C++ template metaprogrammingがあります。
C++メタプログラミングは、完全なソースコード生成に似ています。 –
@Industrial:まさにその通りです。しかし、チューリングマシンもそうです。言い換えれば、実際に何が使えるかについて何も役に立たないとは言えません。 –