Reputation: 1856
I had a (lambda) function and a lot of functors passed as variadic argument pack into a third function. The signature looks like
template<typename F, typename... G>
ret_t call(F&& func, G&&... getters);
and F
shall have as many as argument as the number of getters
given.
Now I need to call func
with the return value of getter
called against a hard-coded (constexpr) constant determined otherwise. So untemplated code might look like
{
return func(getters_1(0), getters_2(0), getters_3(0) /* , ... */);
}
Of course I want to automate the process with template metaprogramming.
I want to avoid a temporary array or whatever intermediate container. (This is not aimed to that generic, I know the return type of getters.) I want it to be passed to the function as directly as possible so as to enable optimization and avoid waste of memory.
I could have wrapped F with many levels of closure of lambda, each wraps one parameter to it, and hope the best from compiler, but anyways I'm asking for better and clearer ways to do it.
Upvotes: 0
Views: 221
Reputation: 48998
If I understood you correctly you want something like this:
template<typename F, typename... G>
ret_t call(F&& func, G&&... getters) {
return std::forward<F>(func)(std::forward<G>(getters)(0)...);
}
Upvotes: 4