Considere el siguiente código:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
Así es como debe inicializar B: B<int, 3> b = { {}, {1, 2, 3} };
quiero evitar el vacío {} innecesario para la clase base. Hay una solución propuesta por Jarod42 aquí , sin embargo, no funciona con elementos de inicialización por defecto: B<int, 3> b = {1, 2, 3};
está bien, pero B<int, 3> b = {1};
no lo es: b.data[1]
y b.data[2]
no son opción predeterminada inicializa a 0 y se produce un error de compilación. ¿Hay alguna forma (o habrá con c ++ 20) para "ocultar" la clase base de la construcción?
template<class... Ts> B(Ts... args) : data{args...} {}
?