В C вы можете сделать int a[] = {1,2,3,4,5}
, но С++ 11 std::array<int> a = {1,2,3,4,5}
даст "Слишком мало параметров шаблона" компилирует ошибку. Как это обойти?
Самое лучшее, что вы можете сделать, это make_array
, что-то вроде:
template<typename T, typename...Ts>
constexpr std::array<T, 1 + sizeof...(Ts)> make_array(T&& head, Ts&&...tail)
{
return {{ std::forward<T>(head), std::forward<Ts>(tail)... }};
}
Реализация std :: array:
template<typename T, std::size_t N>
struct array {
T array_impl[N];
};
Так что это должно работать:
std::array<std::int, 5> a = {{ 1, 2, 3, 4, 5 }};
который по сути аналогичен (поскольку компилятор согласился сбрасывать внутренние фигурные скобки.
std::array<std::int, 5> a = { 1, 2, 3, 4, 5 };
Видеть
1 + sizeof...(Ts)
? Для чего нужно дополнительное место?1
для первого параметраT head
(мы выводим тип изhead
).