C++ 容器中自定义类型 value_type
2017-05-17 18:07
197 查看
刚学C++ Primer的时候,经常看见书上说,使用容器的时候,尽量用value_type是个好习惯,觉得比起直接写类型,麻烦很多,所以并不是很能理解,看模板的时候终于明白了为什么所有容器都要定义一个value_type了。
现在来看看value_type到底有什么用。
首先定义两个包装容器,只是对任意类型的值进行了一层包装而已。
现在来试着实现一个函数,可以从这两个容器中取出里面的值,并且作为返回值。
最简单的方法肯定是模板函数了,然而返回值怎么表示?如果容器中没有定义value_type的话,这个函数是无法实现的。(C11的auto可能可以吧)
在使用了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之后就可以写出和实现具体容器无关却可以对容器内容进行操作的代码了~
相关文章推荐
- C++ 10.3 关联容器map定义以及value_type、key_type、mapped_type
- 【C/C++开发】STL内嵌数据类型: value_type
- C++:特殊运算符的重载star、小括号、TYPE自定义类型、new和delete
- QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类
- c++如何理解map对象的value_type是pair类型
- C++类型转换关键字 *_cast<type> (expression)
- C++容器:容器中衍生出的类型
- [VC++入门]C++中常用的运算符及微软自定义类型
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-005控制类型映射(Nationalized、@LOB、@org.hibernate.annotations.Type)
- C/C++之联合体,枚举,自定义类型
- c++ type trait 之 检验类型关系(Type Relation)
- mybatis自定义类型处理器-TypehHandler
- c#传递值类型(value-type)
- Creating a Custom Account Type 创建自定义帐户类型
- Oracle type (自定义类型的使用)
- 查询对象的自定义类型WTTypeDefinition
- oracle 自定义类型 type / create type
- Hibernate对自定义类型UserType的用法
- C++-关联容器类型map
- JSON 序列化与反序列化(一)使用TypeReference 构建 类型安全的异构容器