C++11之模板的别名
Posted 林夕07
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++11之模板的别名相关的知识,希望对你有一定的参考价值。
系列文章
C++11之正则表达式(regex_match、regex_search、regex_replace)
C++11之线程库(Thread、Mutex、atomic、lock_guard、同步)
C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_ptr)浅谈内存管理
C++11之强制类型转换(static_cast,const_cast,dynamic_cast,reinterpret_cast)
C++11之右值引用:移动语义和完美转发(带你了解移动构造函数、纯右值、将亡值、右值引用、std::move、forward等新概念)
C++11之内联名字空间(inline namespace)和ADL特性(Argument-Dependent name Lookup)
目录
模板的别名
在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;
以上是关于C++11之模板的别名的主要内容,如果未能解决你的问题,请参考以下文章