我正在使用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);
这是我要实现的东西。我想在不使用可变参数模板的情况下做到这一点。
答案 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);
}