曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4506|回复: 0
打印 上一主题 下一主题

[C++11] 模板别名

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-12-24 18:10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
可以使用 typedef 为模板具体化指定别名,比如:
[C++] 纯文本查看 复制代码
typedef std::array<double, 12> arrd;
typedef std::array<int, 12> arri;
typedef std::array<std::string, 12> arrst;
arrd gallons;  // gallons 是 std::array<double, 12> 类型
arri days;     // days 是 std::array<int, 12> 类型
arrst months;  // months 是 std::array<std::string, 12> 类型


C++11 新增了一项功能 --- 使用模板提供一系列别名。比如:
  1. template<typename T>
  2. using arrtype = std::array<T,12>;  //可用来创建多个别名的模板
复制代码
这样,arrtype 就被定义为一个模板别名,可使用它来指定类型,比如:
  1. arrtype<double> gallons;   // gallons 是 std::array<double, 12> 类型
  2. arratype<int> days;    //days 是 std::array<int, 12> 类型
  3. arrtype<std::string> months;     // months 是 std::array<std::string, 12> 类型
复制代码
总之,arrtype<T> 表示类型 std::array<T, 12> 。

C++11 允许将语法 using = 用于非模板。用于非模板时,这种语法与常规的 typedef 等价:
  1. typedef const char * pc1;       // typedef 语法
  2. using pc2 = const char *;       // using = 语法
  3. typedef const int *(*pa1)[10];  // typedef 语法
  4. using pa2 = const int *(*)[10]; // using = 语法
复制代码
当习惯这种语法后,你可能会觉得这个可读性更强,因为它让类型名和类型信息更清晰
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-30 14:17 , Processed in 0.076148 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表