Как typedef массив std:: с неопределенным размером?

Я хочу написать некоторые переменные типа

std::array<double, array_num> a;

где array_num - это const int, представляющий длину массива. Но это долго, и я хочу создать для него псевдоним:

typedef std::array<double, array_num> my_array;

Правильно ли это? Как использовать my_array как my_array<3>?

Ответ 1

Что вам нужно, это шаблон alias:

template <size_t S>
using my_array = std::array<double, S>;

Вы не можете напрямую создать шаблон typedef, см. этот пост.

size_t - это тип второго параметра шаблона std::array, а не int.

Теперь, когда вы знаете о using, вы должны использовать это. Он может делать все, что делает typedef, плюс это. Кроме того, вы читаете его слева направо с красивым знаком = в качестве разделителя, в отличие от typedef, который иногда может повредить вашим глазам.


Позвольте мне добавить еще два примера использования:

template <typename T>
using dozen = std::array<T, 12>;

И если вы хотите создать псевдоним для std::array, например, вам нужно будет подражать его сигнатуре шаблона:

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

- потому что это недопустимо:

using my_array = std::array;