tupleを展開して関数に渡す関数
tupleを展開して関数に渡す関数
boostを使えば出来るらしいけど、知らない。
出来栄えはかなり雑です。
template <class F, class... Ts, class... Us> typename std::enable_if< sizeof...(Us) == sizeof...(Ts), std::result_of_t<F(Ts...)>>::type apply_impl(F&& fun, std::tuple<Ts...>&, Us&... us) { return fun(us...); } template <class F, class... Ts, class... Us> typename std::enable_if< sizeof...(Us) < sizeof...(Ts), std::result_of_t<F(Ts...)>>::type apply_impl(F&& fun, std::tuple<Ts...>& args, Us&... us) { return apply_impl(fun, args, us..., std::get<sizeof...(Us)>(args)); } template <class F, class... Ts> std::result_of_t<F(Ts...)> apply(F&& fun, std::tuple<Ts...>& args) { return apply_impl(fun, args); }
使用例
template <class... Ts> auto pop_front(std::tuple<Ts...>& args) { return apply([](auto&&, auto&&... v) {return std::make_tuple(v...); }, args); }