Как инициализировать последовательность неподвижных, не копируемых объектов?
Позволять'скажем, у меня есть тип, который не является ни подвижным, ни копируемым:
struct foo
{
explicit foo( size_t ){}
~foo(){}
foo( foo const & ) = delete;
foo( foo && ) = delete;
foo& operator=( foo const & ) = delete;
foo& operator=( foo & ) = delete;
};
Теперь, учитывая число, известное во время компиляции (назовите его N), есть ли способ, которым я могу создатьпоследовательность" из них в стеке, каждый из которых инициализируется числами от 0 до N-1? Я был бы доволен массивом в стиле Cfoo[N]
,std::array< foo, N >
или, может быть, дажеstd::tuple
какой-то
Что я'Я пытаюсь избежать, пишу:
foo f0( 0 ), f1( 1 ), ... fNminus1( N-1 );
когда мне кажется, что это то, что компилятор должен сделать для меня. Лучший яЯ смог придумать, использует.boost::optional
boost::optional< foo > f[N];
for( size_t i = 0U; i < N; ++i )
f[i] = boost::in_place( i );
Но это зависит от логики времени выполнения, хотя вся необходимая информация доступна во время компиляции. Плюс ям осталось с чем-то, что ведет себя как массив указателей.