C ++使用元组作为模板中的参数包

时间:2018-12-30 21:22:56

标签: c++ templates

我正在使用boost::callable_traits::args_t从方法中获取参数类型的std :: tuple。可以使用该元组作为参数包吗?

void doJob(int i) {
  std::cout << i << std::endl;
}
template<auto F>
void magic(boost::callable_traits::args_t<F> ...args) { // here is the magic
  F(args...)
}
magic<doJob>(1);

这是我要实现的东西。我想在不使用可变参数模板的情况下做到这一点。

1 个答案:

答案 0 :(得分:2)

如果可以使用C ++ 17,则可以使用std::apply来调用该函数。 std::apply接受一个可调用对象和一个元组,并使用未包装的元组作为函数参数调用该可调用对象。这样会使magic看起来像

template<auto F>
void magic(boost::callable_traits::args_t<F> args) { // here is the magic
  std::apply(F, args);
}