こんなのしか思いつかなかった。
可変引数を保持しておいてそれを別な関数に渡すには?
やりたい事と違うかもしれませんが
#include <tuple> #include <iostream> #include <string> template <class T> void do_something(const T& t) { std::cout << t << std::endl; } template <class Tuple, size_t N> struct do_tuple_helper { static void do_all(const Tuple& t) { do_something(std::get<N>(t)); do_tuple_helper<Tuple, N-1>::do_all(t); } }; template <class Tuple> struct do_tuple_helper<Tuple, 0> { static void do_all(const Tuple& t) { do_something(std::get<0>(t)); } }; template <class Tuple> void do_tuple_all(const Tuple& t) { do_tuple_helper<Tuple, std::tuple_size<Tuple>::value-1>::do_all(t); } template <class... Args> class functor { std::tuple<Args...> args_; public: functor(Args&&... args) : args_(std::move(args)...) {} void operator()() const { do_tuple_all(args_); } }; int main() { functor<int, std::string, double> f(1, "hellow", 3.1); f(); return 0; }
これだと3,hellow,1の順でdo_something関数に渡ってしまいます。
std::tupleにはboost::tuples::null_typeみたいなものって無いんですかね?