c++模板的一些知识点总结
来源:互联网 发布:翼支付软件 编辑:程序博客网 时间:2024/06/06 09:39
一.
1 可以为类模板的模板参数提供默认参数,函数模板却不行。
2可以为类模板进行偏特化,而函数模板却不行。
二.模板参数
1 类型(可以是内建类型或是用户自定义类型)
2 无类型参数(整数,指针,某些静态实体的引用 例:bitset)
3 其他模板
三.关于typename
若一个模板代码内部的某个类型被模板类型参数所限定,则必须使用关键字typename作为前缀进行声明(构造函数的初始化列表中除外)
原因:
Template <class T>
class X
{
Typename T::id i;//如果无typename的话,将出错
…
}
这个模板定义假定,处理的类T中必须拥有某种称为id的嵌套类型,id也可以是一个T的静态数据成员或枚举类型等。然而编译器默认这个标示符是一个数据对象,而非类型,因此当用此模板参数的嵌套类型来声明对象时,必须加typename进行声明。
四.关于函数模板
对于函数模板,可以省略掉模板参数,编译器会从函数的参数中推断出它们的类型。不允许使用默认模板参数。
然如果有一个函数模板,它的模板参数即作为参数类型又作为返回类型那么一定要首先申明函数的返回参数类型,否则就不能神略掉函数参数表中的任何类型参数。如:
Template <typename R,typename P>R imolicit_cast(const P& p){ Return p;}int main(){int I = 1;float x = implicit_cast<float>(i);int j = implicit_cast<int>(x); }
如果将第一行的模板参数R和P交换,则会编译出错,因为第一个模板参数作为函数的参数类型。
五.模板类的声明与定义
传统的编程方法中,普通函数的声明与定义相分离是一种比较好的设计,然在使用类模板技术时, 模板类的声明与定义都放在.h文件中程序会顺利的运行。如果想在.h和.cpp中分开实现,则需采取几种特别的处理技术来实现,否则会出现连接错误(类似error LNK2019: 无法解析的外部符号)。
1 C++ 模板类的声明与定义分别放在 H 文件 和 CPP文件中 在使用时需要把 CPP文件也饱含与当前文件中 如: #include "文件名.cpp"。
2 在template前加关键字export(相当部分编译器不支持)
3 在类模板实现的cpp文件中实例化其他文件中要用到的类型
原因:模板类有着编译器多态的性质,是一种隐式接口,编译器在编译期间会根据不同的模板参数类型具现化类,如果将模板类的声明和实现相分离(即分别置于.h文件和.cpp文件中时),编译器会将.cpp编译成obj文件,当其他文件使用到这个模板类时,如果不采取以上提供的几种方法,编译器只能具现化模板类的声明,并不能具现化它的实现(其实现文件已编译成obj文件),因此在链接的时候会出现链接错误。
- c++模板的一些知识点总结
- 黑马程序员—C重点--总结一些琐碎的知识点
- C++的一些知识点总结
- ios一些知识点的总结
- Java一些知识点的总结
- 树的一些知识点总结
- 总结的一些小知识点
- Thymeleaf模板引擎的一些知识点
- C语言的一些知识点
- C语言的一些知识点
- 关于C++STL模板库的一些总结(一)
- 重载和模板的知识点总结
- js的一些知识点的总结
- 关于java一些知识点的总结
- 黑马程序员-一些知识点的总结
- 一些cocos2d-x开发的知识点总结
- 对匿名函数的一些知识点总结!
- Linux的一些小知识点总结
- 『写给自己,未来十年的一封信』
- [IPhone开发]发送Http请求(POST GET)的方法
- PHP应用-连接MySQLppt纲要
- poj 1151 Atlantis
- Android开发之事件+实例
- c++模板的一些知识点总结
- 怎样消除这三个错误?
- PHP应用-时间与日期ppt
- 成为Java高手的25个学习目标
- BigDecimal类方法封装实际使用
- PHP应用-会话跟踪ppt
- oracle 线上生效的初始化参数判定
- Server 小组学习论坛
- sqlconnection 与 repeater等数据控件的绑定