I need to initialize an std:array with N objects taking the same constructor arguments, as in std::vector<T>(size_t, {args...})
. From my search here I came up with this, which works:
template<typename T, size_t... Ints, typename... Args>
std::array<T, sizeof...(Ints)> make_array_(std::index_sequence<Ints...>, Args&&... args) {
return { (Ints, T{args...})... };
}
template<typename T, size_t N, typename... Args>
std::array<T, N> make_array(Args&&... args) {
return make_array_<T>(std::make_index_sequence<N>(), args...);
}
struct AStruct {
AStruct(int a, float b) : a_{ a }, b_{ b } {}
private:
int a_; float b_;
}
int main() {
auto anArray = make_array<AStruct, 10>(8, 5.4f);
// etc...
}
But I don't understand the third line. How does (Ints, T{args...})...
translate to T{args...}, T{args...}, T{args...}...
N times?