I took answer from Jarod42 and made an extension to be able to use variable amount of Constructor arguments and also added automatic indexer as a first arg:
namespace detail {
template <typename T, std::size_t... Seq, typename... Args>
constexpr std::array<T, sizeof...(Seq)> make_array(std::index_sequence<Seq...>, Args &... args)
{
return {{(static_cast<void>(Seq), T(Seq, args...))...}};
}
} // namespace detail
template <typename T, std::size_t N, typename... Args>
constexpr std::array<T, N> make_array(Args &... args)
{
return detail::make_array<T>(std::make_index_sequence<N>(), args...);
}
class myClass {
myClass(unsigned int i, float a, std::string b, int c):... {};
}
Usage:
auto myArray = make_array<myClass, 64>(a, b, c);