テンプレートメタプログラミングとは、C++のテンプレート(template)を使って、コンパイル時に様々な処理を行ってしまうテクニックです。
簡単な例をいくつか紹介します
if_c <[条件], [真の場合], [偽の場合]>この"if_c"を使って、要素が固定されているデータ配列があり、通常はstd::vector<>を使って実装したいが、要素が1個の場合は単独の定義としたいというHogeClassの実装を行ってみます。
template <size_t N, typename DataType> struct HogeClass { typedef if_c<N==1, DataType, std::vector<DataType> >::type type; };例:
HogeClass<1, std::string>::type singleString; HogeClass<5, std::string>::type vectorString;if_cの定義
template <bool C, typename T, typename F> struct if_c { typedef T type; }; template <typename T, typename F > struct if_c<false,T,F> { typedef F type; };