Pertimbangkan kode berikut:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
Ini adalah bagaimana Anda harus menginisialisasi B: B<int, 3> b = { {}, {1, 2, 3} };
Saya ingin menghindari {} kosong yang tidak perlu untuk kelas dasar. Ada solusi yang diusulkan oleh Jarod42 di sini , namun, itu tidak bekerja dengan inisialisasi default elemen: B<int, 3> b = {1, 2, 3};
baik-baik saja tetapi B<int, 3> b = {1};
tidak: b.data[1]
dan b.data[2]
tidak default diinisialisasi ke 0, dan terjadi kesalahan kompiler. Apakah ada cara (atau akan ada dengan c ++ 20) untuk "menyembunyikan" kelas dasar dari konstruksi?
template<class... Ts> B(Ts... args) : data{args...} {}
?