Rozważ następujący kod:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
Oto jak zainicjować B: B<int, 3> b = { {}, {1, 2, 3} };
Chcę uniknąć niepotrzebnego pustego {} dla klasy podstawowej. Jest to rozwiązanie proponowane przez Jarod42 tutaj , jednak nie działa z domyślnych elementów inicjacji: B<int, 3> b = {1, 2, 3};
jest w porządku, ale B<int, 3> b = {1};
nie jest: b.data[1]
i b.data[2]
nie są domyślnie ustawiony na 0 i wystąpi błąd kompilatora. Czy jest jakiś sposób (lub będzie z c ++ 20), aby „ukryć” klasę bazową przed budową?
template<class... Ts> B(Ts... args) : data{args...} {}
?