yik*_*iao 11 c++ alias templates typedef c++11
我想写一些变量,比如
std::array<double, array_num> a;
Run Code Online (Sandbox Code Playgroud)
where array_num是const int表示数组的长度.但它很长,我想为它创建一个别名:
typedef std::array<double, array_num> my_array;
Run Code Online (Sandbox Code Playgroud)
这样对吗?我如何使用my_array像my_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)