普通のプログラミングは、実行コードを生成するための作業です。
対して、メタプログラミングは、プログラム言語のコードを生成するための作業、
とでも言いましょうか。一つは define
と include
を駆使することで、C++ソースの繰り返し記述を自動化する preprocessor ライブラリ。
もう一つは、template
上で関数、イテレータ、条件分岐、
他色々を実現することで、コンパイル時に(プリプロセッサと違って
C++ の意味論を無視せずに)複雑な処理を行わせる MetaProgramming ライブラリ。