江苏城乡建设厅官方网站,网页设计重庆,wordpress编辑器字体大小,凡科建站做的网站收录慢吗文章目录 一、模板使用时一定要加typename的情况二、 非类型模板参数三、模板的特化1.函数模板特化2.类模板特化1.全特化#xff1a;2. 偏特化#xff1a;1. 部分特化2.参数更一步限制 四、模板的分离编译1.Stack.h2.Stack.cpp(定义)3.test.cpp 一、模板使用时一定要加typena… 文章目录 一、模板使用时一定要加typename的情况二、 非类型模板参数三、模板的特化1.函数模板特化2.类模板特化1.全特化2. 偏特化1. 部分特化2.参数更一步限制 四、模板的分离编译1.Stack.h2.Stack.cpp(定义)3.test.cpp 一、模板使用时一定要加typename的情况
templateclass Container
void Print(const Container v)
{// 编译不确定Container::const_iterator是类型还是对象//错误示范 Container::const_iterator it v.begin();会报错// typename就是明确告诉编译器这里是类型等模板实例化再去找typename Container::const_iterator it v.begin(); //正确vectorint::const_iterator it v.begin();//正确// vectorint的定义实例化出一个具体的类 ,然后到类中寻找const_iteratorwhile (it ! v.end()){cout *it ;it;}cout endl;
}class A
{
public:int begin(){return 0;}//静态成员变量在类外定义static int const_iterator;
};
//反例
int A::const_iterator 1;
//const_iterator为对象
二、 非类型模板参数 类型形参即出现在模板参数列表中跟在class或者typename之类的参数类型名称。 非类型形参: 就是用一个常量作为类(函数)模板的一个参数在类(函数)模板中可将该参数当成常量来使用。 注意 浮点数、类对象以及字符串是不允许作为非类型模板参数的。非类型的模板参数必须在编译期就能确认结果。 三、模板的特化
1.函数模板特化 函数模板的特化步骤 必须要先有一个基础的函数模板关键字template后面接一对空的尖括号函数名后跟一对尖括号尖括号中指定需要特化的类型函数形参表: 必须要和模板函数的基础参数类型完全相同如果不同编译器可能会报一些奇怪的错误。 2.类模板特化
1.全特化 全特化即是将模板参数列表中所有的参数都确定化。 2. 偏特化
1. 部分特化 将模板参数类表中的一部分参数特化 2.参数更一步限制 偏特化并不仅仅是指特化部分参数而是针对模板参数更进一步的条件限制所设计出来的一个特化版 本 四、模板的分离编译 什么是分离编译: 一个程序项目由若干个源文件共同实现而每个源文件单独编译生成目标文件最后将所有目标文件链 接起来形成单一的可执行文件的过程称为分离编译模式。 1.Stack.h 2.Stack.cpp(定义) 3.test.cpp 运行之后会报错链接错误 解决方法
将声明和定义放到一个文件 “xxx.hpp” 里面或者xxx.h其实也是可以的。推荐使用这种。模板定义的位置显式实例化。这种方法不实用不推荐使用。