c++ - 从可变参数模板中的一组仿函数中调用带有参数的函数

标签 c++ lambda metaprogramming variadic-functions c++17

我有一个 (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/

相关文章:

c++ - 嵌套在 for 语句中的 if 语句将不起作用

C++动态内存分配与结构中的数组

c++ - 'a' <= string[i] 是什么意思?

java - 将具有 Runnable 的处理程序升级为 lambda 表达式

elixir - 获取 Elixir 宏中当前范围的文档

C++ 模板元编程——根据运行时输入返回一个类型

c++ - 如何对 std::tuple 中的每个元素应用 constexpr 函数?

c++ - 在 C++ 中重写后如何调用原始函数?

c++ - 捕获捕获本地临时对象的 lambda 函数

java - 为什么我不需要在这里用 try、catch 包装已检查的异常?