Товарищи, хочется так:
#include <array>
#include <tuple>
using namespace std;
struct Q {
void set(int i) {}
};
template <int I>
struct S {
Q mq[I];
template <size_t ...num>
void f(array<int, I> &a,
index_sequence<num...> n=make_index_sequence<I>{}) {
((mq[num].set(a[num])), ...);
}
};
int main() {
S<3> s;
array a{2, 5, 7};
s.f(a);
}
Но почему-то не выходит передать make_index_sequence{} в качестве дефолтного аргумента. Работает, если над f вызовом накостылить обёртку:
template <size_t ...num>
void f_ok(array<int, I> &a) {
f(a, make_index_sequence<I>{});
}
и дёргать её, но наличие доп сущности восторг не вызывает. Может есть ещё какой вариант передать в parameter pack индексы без подобного (f_ok()) костыля?