C++ 调用C+中的可变函数+;以数组作为参数

C++ 调用C+中的可变函数+;以数组作为参数,c++,variadic-templates,C++,Variadic Templates,假设我有一个简单的变量函数,如下所示: template <typename... A> void func(A... args) { //Do stuff } 调用函数 func(1,2,3); 是否可以在不修改模板函数的情况下执行此操作?您可以编写apply,它引用数组和要使用解包数组调用的functor(您可能希望添加完美转发等): 如果foo只是一个普通的模板函数,如示例中所示,则可以将其包装在lambda中: apply([](auto...xs){foo(st

假设我有一个简单的变量函数,如下所示:

template <typename... A>
void func(A... args)
{
    //Do stuff
}
调用函数

func(1,2,3);

是否可以在不修改模板函数的情况下执行此操作?

您可以编写
apply
,它引用数组和要使用解包数组调用的functor(您可能希望添加完美转发等):

如果
foo
只是一个普通的模板函数,如示例中所示,则可以将其包装在lambda中:

apply([](auto...xs){foo(std::forward<decltype(xs)>(xs)...);}, a);
apply([](自动…xs){foo(std::forward(xs)…);},a);

也许您可以编写一个(也是模板化的)包装函数,将参数应用于原始模板,如果我想向该模板传递多个类型,例如,我想调用foo(“a”,1,3.0),该怎么办。你对如何做有什么提示吗?使用
std::tuple
和同样的方法,用
t[Idx]
代替
std::get(t)
和tuple的数组引用。但是我也不知道我得到的元素是什么,可以是
foo(“a”)
foo(1,2.0)
。否则,在指定
std::tuple
时,我也会遇到同样的问题,因此我所拥有的只是一个对列表,例如,第二个值指定了类型,这仍然可以做到吗@Fynn我不确定我是否理解。我建议提出另一个问题,详细说明你的问题。
template <typename F, typename T, std::size_t N, std::size_t... Idx>
decltype(auto) apply_impl (F f, T (&t)[N], std::index_sequence<Idx...>) {
    return f(t[Idx]...);
}

template <typename F, typename T, std::size_t N>
decltype(auto) apply (F f, T (&t)[N]) {
    return apply_impl(f, t, std::make_index_sequence<N>{});   
}
apply(foo{}, a);
apply([](auto...xs){foo(std::forward<decltype(xs)>(xs)...);}, a);