C++11快餐教程(1)-通过using定义类型的别名
2016-09-12 15:29
316 查看
C++11快餐教程(1)-通过using定义类型的别名
在C/C++中,我们经常通过typedef来定义类型的别名。例如:
typedef unsigned char u1; typedef unsigned short u2;
但是,这样定义有一点不好,新定义的别名是放在后面的。一般我们都是通过别名找原名,从后往前找还是不方便的。
那么,我们把别名定义在前面好不好?
using u4 = uint32_t; using u8 = uint64_t;
在C++11中,using不再只是用于using namespace啦,从此在别名领域大显身手。
using用来定义别名,特别适用于在模板的情况下:
下面的例子来源于ART中的容器类型的定义:
template <typename T> using ArenaDeque = std::deque<T, ArenaAllocatorAdapter<T>>; template <typename T> using ArenaQueue = std::queue<T, ArenaDeque<T>>; template <typename T> using ArenaVector = std::vector<T, ArenaAllocatorAdapter<T>>; template <typename T, typename Comparator = std::less<T>> using ArenaSet = std::set<T, Comparator, ArenaAllocatorAdapter<T>>; template <typename K, typename V, typename Comparator = std::less<K>> using ArenaSafeMap = SafeMap<K, V, Comparator, ArenaAllocatorAdapter<std::pair<**const** K, V>>>;
有了上面的定义之后,我们的封装后的类型就可以泛型使用了:
ArenaVector<MIRLocation> method_stack_; // Include stack
这是typedef无法实现的哦。
小结一下:
* C++11中的using关键字可以实现typedef的功能,而using的定义顺序有利于查找
* using在模板类型的别名定义比typedef要有效
相关文章推荐
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- C#中using指令的几种用法
- C++11的for循环,以及范围Range类的简单实现
- C++11的新特性简单汇总介绍 (二)
- C++11的新特性简单汇总介绍 (一)
- 谈C# using的用法与好处
- Locate a File Using a File Open Dialog Box
- Save a File Using a File Save Dialog Box
- 找不到类型或命名空间名称“Server”(是否缺少 using 指令或程序集引用?)
- C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
- 浅析C++11中的右值引用、转移语义和完美转发
- Using the TextRange Object
- AngularJs Using $location详解及示例代码
- 在 Qt4 中使用 C++11
- eclipse CDT 相关设置
- Using Iframes Sparingly
- 不可小瞧的using关键字(转)
- c++11新特性--decltype auto
- centos安装devtoolset-3支持gcc 4.9.2
- c++11学习笔记