Рассмотрим следующий код:
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...} {}
?