Итак, давайте предположим, у меня есть следующий класскласса с станд :: массив объектов без конструкторов по умолчанию
class NoDefaultConstructor {
NoDefaultConstructor() = delete;
...
};
И у меня есть еще один класс, который имеет массив типа NoDefaultConstructor
и других членов
class Wrapper {
std::array<NoDefaultConstructor, 2> arr;
...
};
Как инициализировать массив в конструкторе для Wrapper
(возможно, в списке инициализаторов с использованием std::intializer_list
)?
В частности, это единственный способ передать аргументы конструктору массива в списке инициализаторов для Wrapper
, чтобы иметь конструкцию, аналогичную следующей: Я думал об этом, потому что размер массива может измениться в будущем.
template <typename... Values>
Wrapper(Values&&... values) : arr{std::forward<Values>(values)...} {}
Вы можете хранить 'станд :: unique_ptr' экземпляры в массиве вместо просто 'NoDefaultConstructor'. –
ArchbishopOfBanterbury
Я исследовал эту идею, но я не хотел ее использовать, потому что вместо этого я мог бы использовать 'std :: vector' – Curious
Поиск вопросов о том, как инициализировать элементы данных без конструкторов по умолчанию. Их много. – juanchopanza