У меня есть класс Foo
без разумного конструктора по умолчанию. Я также предпочел бы сохранить конфиденциальность оператора копирования, хотя это может стать невозможным. (Я хотел бы сделать класс «почти» неизменяемым, поэтому потокобезопасным, имея поля const
и небольшое количество мутаторов, которые приводят const way как private и в начале срока жизни объекта.)
Создание std::vector<Foo>
с этими ограничениями - небольшая проблема. Я нашел решение, которого не видел нигде (см., Например, предыдущий вопрос SO 1 ). У меня есть собственный итератор, который при разыменовании создает Foo
. Он настроен так, что каждый вызов увеличивается до следующего значения Foo
в векторе. Последовательность легко определить. Я определяю operator++
, next
, advance
, distance
и operator*
на CustomIterator
.
Тогда у меня
std::vector<Foo> foo_vec{CustomIterator(0), CustomIterator(size_of_vector)};
Нет проблем с доступом. Нет ненужных конструкций. Нет копий. Кто-нибудь видит проблему с этим?