В новом стандарте в библиотеке появилась безопасная обёртка вокруг встроенного массива std::array. Сделано вроде как просто и эффективно. Даже инициализировать его можно так же как встроенный массив.
Всё бы хорошо, но есть одна проблема. Этот шаблонный класс требует два параметра: тип хранимого значения и размер. И если я хочу например передать array в фукнцию, даже по ссылке или указателю, я должен в типе аргумента функции указать оба параметра шаблона: тип и размер.
Пример:
#include <iostream>
#include <array>
void f(const std::array<int, 5>& x) {
for (int y : x)
std::cout << y << ", ";
std::cout << '\n';
}
int main() {
std::array<int,5> a={1,2,3};
f(a);
return 0;
}
Это очень неудобно: нужно плодить волшебную константу везде, где используется массив и заменять ее ручками когда в массив добавляется ещё одно значение. При этом в функции эта константа никак не используется.
Подскажите пожалуйста, можно ли как-то обойти эту проблему?