Как объявить использование для std::array с помощью шаблона

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

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.


person Gediminas    schedule 10.10.2019    source источник


Ответы (2)


Второй параметр шаблона std::array — это параметр нетипового шаблона с типом std::size_t. Должен быть

template<typename A, std::size_t B>
using Array = std::array<A, B>;
person songyuanyao    schedule 10.10.2019

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

                     vvvvvv

template<typename T, size_t S>
using Array = std::array<T, S>;
person Jack    schedule 10.10.2019