我有一个 (lambda) 函数,许多仿函数作为可变参数包传递给第三个函数。签名看起来像
template<typename F, typename... G>
ret_t call(F&& func, G&&... getters);
和 F
应具有与给定的 getters
数量一样多的参数。
现在我需要用 getter
的返回值来调用 func
,该调用是针对以其他方式确定的硬编码 (constexpr) 常量调用的。所以未模板化的代码可能看起来像
{
return func(getters_1(0), getters_2(0), getters_3(0) /* , ... */);
}
当然,我想用模板元编程来自动化这个过程。
我想避免使用临时数组或任何中间容器。 (这不是针对那个通用的,我知道getters的返回类型。)我希望它尽可能直接传递给函数,以实现优化并避免内存浪费。
我可以用许多级别的 lambda 闭包来包装 F,每个级别都将一个参数包装到它,并希望编译器能做到最好,但无论如何我都在寻求更好、更清晰的方法来做到这一点。
最佳答案
如果我理解正确的话,你想要这样的东西:
template<typename F, typename... G>
ret_t call(F&& func, G&&... getters) {
return std::forward<F>(func)(std::forward<G>(getters)(0)...);
}
关于c++ - 从可变参数模板中的一组仿函数中调用带有参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381570/