C++0xでは、可変引数テンプレートという機能が追加されます。
これを使うと、テンプレートパラメータを可変個受け取ることができ、
template <class... Args> // ...と書くと可変引数テンプレートになる class tuple;
可変引数テンプレートは型のリストと見なすことができます。
tuple<int> t1; // 要素1つ(int)の型リスト tuple<int, char> t2; // 要素2つ(int, char)の型リスト tuple<int, char, long> t3; // 要素3つ(int, char, long)の型リスト
ということで、型リストがどこまでできるか試すために
リスト処理を作ってみました。
add_if_c/add_if - 述語を満たす場合に型を追加する(filterの実装用)
【まだ作ってないもの】
init/last、無限リスト
【id:melponn作】
foldr(と、filter、reverseを再帰せずに書いてる)
【eldeshさん作】
foldl
型レベルプログラミングの会でこのネタ話してきました。
まだまだ改良の余地はありそうです。
何か思いついたら随時更新します。