こんなのしか思いつかなかった。


可変引数を保持しておいてそれを別な関数に渡すには?
やりたい事と違うかもしれませんが

#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みたいなものって無いんですかね?