调用来自Variadic模板中一包函子的参数的函数

Call a function with parameter from a pack of functors in variadic template

本文关键字:一包 参数 函数 Variadic 调用      更新时间:2023-10-16

i具有(lambda)函数,许多函子将variadic参数包传递到第三个函数中。签名看起来像

template<typename F, typename... G>
ret_t call(F&& func, G&&... getters);

F的参数应与给定的getters的数量一样多。

现在,我需要调用funcgetter的返回值,以针对硬编码(constexpr)常数为另外确定。因此,未模拟的代码可能看起来像

{
    return func(getters_1(0), getters_2(0), getters_3(0) /* , ... */);
}

当然,我想通过模板元编程自动化该过程。


我想避免临时数组或任何中间容器。(这不是针对该通用的,我知道Getters的返回类型。)我希望它尽可能直接地传递给该功能,以启用优化并避免浪费内存。

我本来可以将f包裹在许多级别的lambda上,每个lambda都包裹了一个参数,并希望从编译器中获得最好的参数,但是无论如何我都要求更好,更清晰的方法来做到这一点。

<</p>

如果我正确理解您,您想要这样的东西:

template<typename F, typename... G>
ret_t call(F&& func, G&&... getters) {
    return std::forward<F>(func)(std::forward<G>(getters)(0)...);
}