假设我有一个简单的可变参数函数,如下所示:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句