如何 typedef a std::array 具有未指定的大小?

How to typedef a std::array with a unspecified size?

我想写一些像

这样的变量
std::array<double, array_num> a;

其中array_num是一个const int表示数组的长度。但是它很长,我想为它创建一个别名:

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

对吗?我怎样才能像 my_array<3> 一样使用 my_array

你需要的是 alias template:

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

您不能直接制作 typedef 模板,请参阅 this post

size_tstd::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;