模板的别名
在C++中,可以使用typedef
关键字为类型定义别名。
语法: typedef 原类型 别名;
而在C++11中,引入了using也可以定义类型的别名。
语法: using 别名 = 原类型;
在C++11中using覆盖了typedef所具有的所有功能,并且还有着typedef没有的功能,这个后面再说。
typdef 与using的使用
通过using
和typedef
分别对unsigned int
定义别名,然后通过C++11的is_same
模板类进行测试俩种方式定义的别名类型是否一致。
#include <iostream> #include <type_traits> using namespace std; using uint = unsigned int; typedef unsigned int UINT; using sint = int; int main() { // C++11的is_same模板类 判断俩个类型是否一致。 cout << is_same<uint, UINT>::value << endl; // 1 cout << is_same<uint, sint>::value << endl; // 0 return 0; }
运行结果:
1 0
由此可见,typedef 和using的作用是相同的。
模板式编程
如果说using为类型定义别名的功能仅仅等同于typedef,那么就太小瞧它了。using在为类型定义别名上还支持模板类型,这是typedef无法完成的功能。
#include <map> #include <string> using namespace std; template<typename T> using MapString = map<T, string>; int main() { MapString<int> m; return 0; }