Fyn*_*ynn 5 c++ variadic-templates
假设我有一个简单的可变函数,如下所示:
template <typename... A>
void func(A... args)
{
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
我需要另一个函数来调用数组中的参数,让我们说:
int arg[3] = {1,2,3};
Run Code Online (Sandbox Code Playgroud)
调用该函数
func(1,2,3);
Run Code Online (Sandbox Code Playgroud)
是否可以在不修改模板化函数的情况下执行此操作?
您可以编写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>{});
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它,如果foo是仿函数类:
apply(foo{}, a);
Run Code Online (Sandbox Code Playgroud)
如果foo只是一个普通的模板函数,就像你的例子一样,你可以将它包装在lambda中:
apply([](auto...xs){foo(std::forward<decltype(xs)>(xs)...);}, a);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |