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之Lanbda表达式(匿名函数)

C++11之右值引用:移动语义和完美转发(带你了解移动构造函数、纯右值、将亡值、右值引用、std::move、forward等新概念)

C++11之委派构造函数

C++11之显式转换操作符-explicit

C++11之内联名字空间(inline namespace)和ADL特性(Argument-Dependent name Lookup)


目录


模板的别名

在C++中,可以使用typedef关键字为类型定义别名。
语法: typedef 原类型 别名;

而在C++11中,引入了using也可以定义类型的别名。
语法: using 别名 = 原类型;

在C++11中using覆盖了typedef所具有的所有功能,并且还有着typedef没有的功能,这个后面再说。

typdef 与using的使用

通过usingtypedef分别对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之模板的别名的主要内容,如果未能解决你的问题,请参考以下文章

C++11之模板的别名

C++开发之using定义模板别名

C++开发之using定义模板别名

C++开发之using定义模板别名

[C++11]使用using和typedef给模板定义别名

c++11新特性之引用折叠