Как объявить «использование» для «std :: array» с помощью шаблона - PullRequest
1 голос
/ 10 октября 2019

Например, у меня есть код вроде:

template<typename A, typename B>
using Map = std::map<A, B>;

template<typename A, typename B>
using UnorderedMap = std::unordered_map<A, B>;

Я хотел бы сделать то же самое для std::array, то есть:

template<typename A, typename B>
using Array = std::array<A, B>;

Но если я сделаю это, яполучит ошибку компилятора:

ошибка C2993: «B»: недопустимый тип для нетипичного параметра шаблона «_Size»

ошибка C2955: «std :: array»: использоватьшаблона класса требуется шаблон

массив списка аргументов (21): сообщение: см. объявление 'std :: array'

Есть ли способ объявить Array, который бына заднем плане используйте std::array?

В конце я хочу использовать массивы типа Array<int, 7> items вместо std::array<int, 7> items.

Ответы [ 2 ]

12 голосов
/ 10 октября 2019

2-й шаблонный параметр std::array - это нетипизированный шаблонный параметр с типом std::size_t. Это должно быть

template<typename A, std::size_t B>
using Array = std::array<A, B>;
4 голосов
/ 10 октября 2019

Ну, второй аргумент шаблона std::array не тип, а size_t, поэтому синтаксис должен быть

                     vvvvvv

template<typename T, size_t S>
using Array = std::array<T, S>;
...