gpt4 book ai didi

c++ - 使用数组作为参数在 C++ 中调用可变参数函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:35 24 4
gpt4 key购买 nike

假设我有一个像这样的简单可变参数函数:

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

我需要另一个函数来调用数组中的参数,比方说:

int arg[3] = {1,2,3};

调用函数

func(1,2,3);

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

最佳答案

您可以编写 apply,它引用一个数组和仿函数来调用解压后的数组(您可能想要添加完美转发等):

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>{});
}

然后这样调用它,如果 foo 是一个仿函数类:

apply(foo{}, a);

如果 foo 只是像您的示例中那样的普通模板函数,您可以将其包装在 lambda 中:

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

Live Demo

关于c++ - 使用数组作为参数在 C++ 中调用可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com