Предположим, тип foo_t
с идиомой именованного конструктора make_foo()
. Теперь я хочу иметь ровно 123 foo - ни больше, ни меньше. Итак, я думаю о std::array<foo_t, 123>
. Теперь, если бы foo_t
можно было построить по умолчанию, я бы написал:
std::array<foo_t, 123> pity_the_foos;
std::generate(
std::begin(pity_the_foos), std::end(pity_the_foos),
[]() { return make_foo(); }
);
а Боб мой дядя, верно? К сожалению... foo_t
не имеет ctor по умолчанию.
Как мне тогда инициализировать мой массив? Возможно, мне нужно использовать какое-то вуду расширения вариативного шаблона?
Примечание. В ответах может использоваться что угодно на C++11, C++14 или C++17, если это вообще помогает.