array c++ c++11 vector std stdarray

array - vector class c++>



Cómo crear un std:: array con std:: transform sin el constructor predeterminado (1)

No con std::transform , pero nada que una pequeña plantilla mágica no pueda arreglar.

template<std::size_t N, std::size_t... Is> std::array<Bar, N> foos_to_bars(const std::array<Foo, N>& foos, std::index_sequence<Is...>) { return {{ Bar(foos[Is].m_1, foos[Is].m_2)... }}; } template<std::size_t N, std::size_t... Is> std::array<Bar, N> foos_to_bars(const std::array<Foo, N>& foos) { return foos_to_bars(foos, std::make_index_sequence<N>()); }

std::index_sequence y amigos son C ++ 14, pero fácilmente implementables en C ++ 11. Probablemente hay media docena de implementaciones en SO solo.

Tengo un std::array<Foo, 10> y me gustaría crear un std::array<Bar, 10> usando una función de Foo a Bar . Por lo general, usaría std::transform así:

array<Bar, 10> bars; transform(foos.begin(), foos.end(), bars.begin(), [](Foo foo){ return Bar(foo.m_1, foo.m_2); });

Sin embargo, Bar no tiene un constructor predeterminado, por lo que no puedo crear la matriz de bars . Siempre podría usar vector pero sería bueno poder usar array para garantizar que siempre tenga exactamente 10 elementos. ¿Es eso posible?