如何键入一个未指定大小的std :: array?

yik*_*iao 11 c++ alias templates typedef c++11

我想写一些变量,比如

std::array<double, array_num> a;
Run Code Online (Sandbox Code Playgroud)

where array_numconst int表示数组的长度.但它很长,我想为它创建一个别名:

typedef std::array<double, array_num> my_array;
Run Code Online (Sandbox Code Playgroud)

这样对吗?我如何使用my_arraymy_array<3>

Log*_*uff 29

你需要的是一个别名模板:

template <size_t S>
using my_array = std::array<double, S>;
Run Code Online (Sandbox Code Playgroud)

你无法直接制作typedef模板,请看这篇文章.

size_t是第二个模板参数的类型std::array,而不是int.

既然你知道using,你应该使用它.它可以做任何事情typedef,加上这个.另外,你从左到右阅读它,并带有一个漂亮的=标志作为分隔符,相反typedef,它可能会伤害你的眼睛.


让我再添加两个使用示例:

template <typename T>
using dozen = std::array<T, 12>;
Run Code Online (Sandbox Code Playgroud)

如果你想创建一个别名std::array,比如它,你需要模仿它的模板签名:

template <typename T, size_t S>
using my_array = std::array<T, S>;
Run Code Online (Sandbox Code Playgroud)

- 因为这是不允许的:

using my_array = std::array;
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你!`using`真的更好,`size_t`也是如此. (2认同)