
模版
bai_lu_sz
这个作者很懒,什么都没留下…
展开
-
模版笔记001 - 函数模版
通常而言,不是把模版编译成一个可以处理任意类型的的单一实体,而是对于实例化模版参数的每种类型,都从模版产生出一个不同的实体。用具体类型代替模版参数的过程称为实例化。模版会被编译两次:一次是在实例化之前,检查模版代码本身是否有语法问题;另一次是在实例化期间,检查所有的调用是否有效。在实参推导过程中,每一个参数都必须正确匹配,不允许自动转换。如果参数不匹配,常用的有3种方式来处理:强制类型转化、显原创 2016-11-03 15:40:01 · 441 阅读 · 0 评论 -
模版笔记002 - 类模版
类可以被一种或多种类型参数化。容器类就是一个典型的例子eg:MyStack< T >是类的类型,在声明的时候,如果模版类型的地方,直接使用T就行,如果要使用类类型的地方就需要指明是MyStack < T >, 例如拷贝构造,赋值构造,移动构造,右值拷贝构造。这当然不是绝对要求的,但是为了保证不出错,还是最好这么写。如果是使用类名而不是类类型时,应该使用MyStack,例如构造函数和析构函数。对于原创 2016-11-04 14:08:30 · 423 阅读 · 0 评论 -
模板笔记003 - 非类型模板参数
前面两篇笔记记录了函数模版和类模版的基础介绍,这次介绍一下非类型模版参数。在我的理解中,跟数据相关的有类型和值,不管是函数模版和类模版都可以用值或者类型来充当模板参数,在前面的两篇笔记中,记录的都是用类型来充当模板参数,接下来主要介绍非类型(值)模板参数。从设计的角度看,非类型模板参数并不适合使用缺省值。 而非类型模板函数,非常适用于函数指针。当然这一切都有限制: 通常,非类型模板参数尅是常整数原创 2016-11-10 10:40:11 · 471 阅读 · 0 评论 -
模板笔记005 - 实战基础知识
模板源代码组织方式比较常见的是“包含模型” 说白一点,就是把cpp和h的代码都放到h中。 也可以把#include 放到h头文件的最后(并不推荐这种)除了包含模型,下面介绍一种显式实例化 举个例子:a.h a.cpp main.cpp 其中a.*是模板文件,main.cpp 用到了a.h , 显式实例化就是在mian中包含a.cpp,且声明模板的实例化(就是将具体类型代替模板参数),说原创 2016-11-29 09:18:18 · 434 阅读 · 0 评论 -
模板笔记006 - 术语
1 类和联合都是类类型 2 怎么理解类类型? int类型 string类型 类类型 3 类:由class或是struct引入的类类型 4 类类型包含联合,而类和联合没太多关系 5 类模板是什么? 该类是一个模板,整个类家族的参数化描述 6 模板类是什么? 和类模板类似,只是有两个细微差异:从模板中产生的类、有一个template-id 7 特化是什么? 模板实例化的过程是用具体的值代替实原创 2016-11-29 10:24:11 · 651 阅读 · 0 评论 -
模板笔记004 - 技巧性基础知识
1 typename关键字 什么时候使用typename? 最常见的是template < typename T>模板参数;其次当某个依赖于模板参数的名称是一个类型时,需要用typename来修饰。eg:template <typename T>class A{ typename T::subtype* ptr; // 指向T::subtype类型的指针}先看看如果不使用typen原创 2016-11-21 15:32:42 · 636 阅读 · 0 评论 -
模板笔记007 - 模板的声明、形参、实参
模板笔记007 - 声明 形参 实参声明类模板和函数模板是c++的两种基本类型的模板 模板的声明需要引入一个参数化子句:template <...>联合模板也是类模板的一种和普通的函数一样,模板函数也可以有缺省参数template <typename T>void func1(Stack<T> const&, int max =10){}template <typename T>vo原创 2016-12-07 13:36:49 · 1858 阅读 · 0 评论