'Generate Integer Sequence For Template Parameter Pack
There is a class method template with parameter pack I want to call, defined as:
class C {
template<int ... prp> void function() {}
}
For a given integer N, I need all integers up to N as template arguments for the parameter pack.
constexpr int N = 2;
C c;
c.function<0, 1>();
I have tried using std::integer_sequence, but it can't be used here.
c.function<std::make_integer_sequence<int, N>>();
I also found this answer: Passing std::integer_sequence as template parameter to a meta function Could I pass the function inside the partial specialization, e.g. using std::function? I was not able to use template arguments with std::function.
Additionally, the class has multiple function I would like to call the same way.
c.function1<0, 1>();
c.function2<0, 1>();
There must be a nice way to solve this but I wasn't successful yet. Still trying to understand TMP.
Solution 1:[1]
What about passing the std::integer_sequence as argument?
I mean something as follows
class C {
template <int ... prp>
void function (std::integer_sequence<int, prp...>)
{ /* ... */ }
}
that you can call using std::make_integer_sequence
constexpr int N = 2;
C c;
// this call function<0, 1>(std::integer_sequence<int, 0, 1>);
// the prp variadic list (0, 1, in this case) is deduced
c.function(std::make_integer_sequence<int, N>{});
(caution: code not tested)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | max66 |
