【发布时间】:2021-04-06 17:26:06
【问题描述】:
我想调用一个函数,每个参数都作为参数包传递。 我已经写了一个简单的模板函数:
template<class Function, class... Args>
auto for_each_arg(Function f, Args&&... args) {
(f(std::forward<Args>(args)), ...);
}
当我将它与仅采用一个参数的函数一起使用时,它工作正常:
void foo(int a) { }
for_each_arg(foo, 1);
但是当我尝试调用一个带有两个或更多参数的函数时:
void bar(int a, int b) { }
for_each_arg(bar, 1, 2);
它给出了一个错误too few arguments for call。我该如何解决?可以在 C++17 中创建解决方案。
【问题讨论】:
-
递归可以吗?或者您是否需要模板折叠解决方案?
-
任何解决方案都可以,不必折叠。
标签: c++ templates c++17 variadic-templates variadic-functions