您的位置:首页 > 编程语言 > C语言/C++

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 using