En dépit de la sans doute intéressant de réponse par @Columbo, je veux suggérer une autre solution viable basé sur constexpr
'd les variables de modèle:
#include <cstddef>
template<std::size_t, std::size_t V>
constexpr std::size_t repeat_value = V;
template<std::size_t... N_i>
class A {
template<typename... Args>
void bar(Args&&...) { }
public:
void foo() {
// repeat N_i times value 0
bar(repeat_value<N_i, 0>...);
}
};
int main() {
A<0, 1, 2, 3, 4> a;
a.foo();
}
Je le trouve plus facile à lire au moins, même si elle est mauvaise en termes de performance au moment de la compilation.
Vous pouvez facilement généraliser comme il suit:
template<std::size_t, typename T, T V>
constexpr T repeat_value = V;
Le invokation dans le cas spécifique est ceci:
bar(repeat_value<N_i, int, 0>...);