Considera il seguente codice:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
È così che devi inizializzare B: B<int, 3> b = { {}, {1, 2, 3} };
voglio evitare il vuoto {} inutile per la classe base. C'è una soluzione proposta da Jarod42 qui , tuttavia, non funziona con l'inizializzazione di default degli elementi: B<int, 3> b = {1, 2, 3};
va bene ma B<int, 3> b = {1};
non lo è: b.data[1]
e b.data[2]
non sono inizializzati di default su 0 e si verifica un errore del compilatore. Esiste un modo (o ci sarà con c ++ 20) per "nascondere" la classe base dalla costruzione?
template<class... Ts> B(Ts... args) : data{args...} {}
?