Розглянемо наступний код:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
Ось так потрібно ініціалізувати B: B<int, 3> b = { {}, {1, 2, 3} };
Я хочу уникнути зайвого порожнього {} для базового класу. Існує рішення , запропоноване Jarod42 тут , однак, він не працює з елементами по замовчуванням ініціалізації: B<int, 3> b = {1, 2, 3};
це добре , але B<int, 3> b = {1};
це не так : b.data[1]
і b.data[2]
НЕ дефолт инициализируется в 0, і виникає помилка компіляції. Чи є якийсь спосіб (або буде з c ++ 20) "приховати" базовий клас від будівництва?
template<class... Ts> B(Ts... args) : data{args...} {}
?