C++ 容器中自定义类型 value_type

来源:互联网 发布:电子音乐推荐 知乎 编辑:程序博客网 时间:2024/05/18 23:55

刚学C++ Primer的时候,经常看见书上说,使用容器的时候,尽量用value_type是个好习惯,觉得比起直接写类型,麻烦很多,所以并不是很能理解,看模板的时候终于明白了为什么所有容器都要定义一个value_type了。

现在来看看value_type到底有什么用。

首先定义两个包装容器,只是对任意类型的值进行了一层包装而已。

template <typename T> class Bag //包装容器袋子{public:    typedef T value_type;    T val; //内容    Bag(T value):val(value){};};template <typename T> class Box //包装容器箱子{public:    typedef T value_type;    T val; //内容    Box(T value):val(value){};};

现在来试着实现一个函数,可以从这两个容器中取出里面的值,并且作为返回值。

最简单的方法肯定是模板函数了,然而返回值怎么表示?如果容器中没有定义value_type的话,这个函数是无法实现的。(C11的auto可能可以吧)

在使用了value_type之后~

template <typename C> typename C::value_type unpack(C container){    return container.val;}

所以,在定义了一个value_type之后就可以写出和实现具体容器无关却可以对容器内容进行操作的代码了~