Considérez le code suivant:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
Voici comment vous devez initialiser B: B<int, 3> b = { {}, {1, 2, 3} };
je veux éviter le {} vide inutile pour la classe de base. Il y a une solution proposée par Jarod42 ici , cependant, cela ne fonctionne pas avec l'initialisation par défaut des éléments: B<int, 3> b = {1, 2, 3};
c'est bien mais ce B<int, 3> b = {1};
n'est pas le cas: b.data[1]
et b.data[2]
ne sont pas initialisés par défaut à 0, et une erreur de compilation se produit. Existe-t-il un moyen (ou il y en aura avec c ++ 20) de "cacher" la classe de base à la construction?
template<class... Ts> B(Ts... args) : data{args...} {}
?