Hãy xem xét các mã sau đây:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
Đây là cách bạn phải khởi tạo B: B<int, 3> b = { {}, {1, 2, 3} };
Tôi muốn tránh {} trống không cần thiết cho lớp cơ sở. Có một giải pháp được Jarod42 đề xuất ở đây , tuy nhiên, nó không hoạt động với khởi tạo mặc định của các phần tử: B<int, 3> b = {1, 2, 3};
vẫn ổn nhưng B<int, 3> b = {1};
không phải: b.data[1]
và b.data[2]
không được mặc định khởi tạo thành 0 và xảy ra lỗi trình biên dịch. Có cách nào (hoặc sẽ có với c ++ 20) để "ẩn" lớp cơ sở khỏi xây dựng không?
template<class... Ts> B(Ts... args) : data{args...} {}
?