Betrachten Sie den folgenden Code:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
So müssen Sie B initialisieren: B<int, 3> b = { {}, {1, 2, 3} };
Ich möchte das unnötige leere {} für die Basisklasse vermeiden. Es gibt eine Lösung von Jarod42 vorgeschlagen hier jedoch nicht mit Elementen Standardinitialisierung funktioniert: B<int, 3> b = {1, 2, 3};
ist gut , aber B<int, 3> b = {1};
nicht ist: b.data[1]
und b.data[2]
ist nicht auf 0 initialisiert default und ein Compiler - Fehler auftritt. Gibt es eine Möglichkeit (oder wird es mit c ++ 20 geben), die Basisklasse vor der Konstruktion zu "verstecken"?
template<class... Ts> B(Ts... args) : data{args...} {}
?