variadic template事始め
C++0xでvariadic templateを使って可変数引数の数を数えるプログラムを組んでみる。
使ったのはg++ Ubuntu 4.3.2-1ubuntu12
オプションは
g++ -g -Wall -std=c++0x -o variadic_templ variadic_templ.cpp
#include <iostream> #include <typeinfo> template <typename... arg> struct length; template <typename arg, typename... rest> struct length<arg, rest...> { enum { value = 1 + length<rest...>::value }; }; template <typename arg> struct length<arg> { enum { value = 1 }; }; int main() { typedef length<int, short, char, long, unsigned int> type_list; std::cout << typeid(type_list).name() << std::endl; std::cout << type_list::value << std::endl; return 0; }
最初はよー分からんかったが、id:faith_and_braveさんとこのコードを見てて不完全型宣言してから特殊化としてtemplate argumentが可変のものを用意すればいいのかなー?とやったら通った。
あとで規格の該当個所読んで裏取りしないとな・・・
しかしなれるまで苦労しそうだ・・・
lisp風連結リストだとわかりやすかったんだけどなぁ・・・