美文网首页Modern C++
C++11快餐教程(1)-通过using定义类型的别名

C++11快餐教程(1)-通过using定义类型的别名

作者: Jtag特工 | 来源:发表于2016-09-12 15:29 被阅读98次

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快餐教程(1)-通过using定义类型的别名

    本文链接:https://www.haomeiwen.com/subject/lappettx.html