I've got a template function taking a parameter pack. I want to expand it into calls to a second function while also supplying the index of the item in the pack. I probably can work out how to do it with recursion but I would like to try do it with a fold expression.
This is the function I want the parameter pack to expand into
template<typename T>
void addToRecord(Record& rec, int idx, T&& val)
{
// Do some stuff.
}
And this is the function that takes the parameter pack
template<typename... ARGS>
void addRecord(ARGS&& ...values)
{
Record rec;
// addToRecord(rec, ??????) How do expand 'values' here addToRecord with index of each item?
}
Is this possible? I realize this isn't critical but I'm also trying to get better with using fold expressions.
In addition to another answer let me mention a simpler approach that doesn't need a helper function:
template<typename... Args>
void addRecord(Args&&... values) {
Record rec;
int i = 0;
(addToRecord(rec, i++, std::forward<Args>(values)), ...);
}
The comma operator ,
guarantees that all addToRecord()
s will be called in order:
In a comma expression
E1, E2
, the expressionE1
is evaluated, its result is discarded, and its side effects are completed before evaluation of the expressionE2
begins.