функция: template <size_t N>
std::array<Server, N>
create_cluster() {
return std::array<Server, N>();
}
На самом деле хочется сконструировать экземпляры Server нетривиальным способом, то есть передать в конструктор std::array initializer_list. Правильно я понимаю, что наиболее прямолинейным способом это сделать будет определить лямбду, которая будет конструировать индивидуальный объект Server, завернуть эту лямбду в fold expression и передать в initializer list?
такое не сойдет? https://en.cppreference.com/w/cpp/container/array/to_array заменить только массин на лист/лямбду etc
template <typename Func, std::size_t... Indices> std::array<Server, N> create_cluster_impl(Func&& create_server_func, std::index_sequence<Indices...>) { return { create_server_func(Indices)... }; } template <typename Func, std::size_t N> std::array<Server, N> create_cluster(Func&& create_server_func) { return create_cluster_impl(std::forward<Func>(create_server_func), std::make_index_sequence<N>()); }
Что-то такое хочется?
Мне кажется, смысла в forward при N>1 нет
На всякий случай
Обсуждают сегодня