模版编译和头文件
2015-09-29 15:00
218 查看
当编译器遇到模版定义时,它并不生成代码。只有当我们实例化出模版的 一个特定版本时,编译器才会生成代码。当我们使用模版时,编译器才生成代码。
通常调用一个函数时,编译器只需要掌握函数的声明。类似的,当我们使用一个类类型的对象时,类定义必须是可用的,但成员函数的定义不必已经出现。因将类定义和函数声明放在头文件中,而普通函数和类的成员函数的定义放在源文件中。
模版则不同,为了生成一个实例化版本,编译器需要掌握函数模版或类模版成员函数的定义。因此,与非模版代码不同,模版的头文件通常既包含声明也包含定义。
模版包含两种名字:
那些不依赖模版参数的名字
那些依赖于模版参数的名字
当使用模版时,所有不依赖于模版参数的名字都必须是可见的,这是由模版的提供者来保证的。而且,模版的提供者必须保证,当模版被实例化时,模版的定义,包括类模版的成员的定义,也必须是可见的。
用来实例化模版的所有函数,类型以及类型关联的运算符的声明都必须是可见的,这是由模版的用户来保证的。
通常调用一个函数时,编译器只需要掌握函数的声明。类似的,当我们使用一个类类型的对象时,类定义必须是可用的,但成员函数的定义不必已经出现。因将类定义和函数声明放在头文件中,而普通函数和类的成员函数的定义放在源文件中。
模版则不同,为了生成一个实例化版本,编译器需要掌握函数模版或类模版成员函数的定义。因此,与非模版代码不同,模版的头文件通常既包含声明也包含定义。
模版包含两种名字:
那些不依赖模版参数的名字
那些依赖于模版参数的名字
当使用模版时,所有不依赖于模版参数的名字都必须是可见的,这是由模版的提供者来保证的。而且,模版的提供者必须保证,当模版被实例化时,模版的定义,包括类模版的成员的定义,也必须是可见的。
用来实例化模版的所有函数,类型以及类型关联的运算符的声明都必须是可见的,这是由模版的用户来保证的。
相关文章推荐
- iOS 上的蓝牙框架 - Core Bluetooth for iOS
- for-in用法
- UI实时预览最佳实践(转)
- Shell重定向&>file、2>&1、1>&2的区别
- Win7系统断电重启出现protectsrv.sys蓝屏错误的解决方法
- Encoding tables
- test8.11
- [IOSB]StoryBoard简单使用
- [LeetCode-278] First Bad Version(二分法注意事项)
- Struts2之ModelDriven的使用
- 打开word2010每次都要配置进度的解决办法
- 打开word2010每次都要配置进度的解决办法
- android关于属性动画的七个使用案例
- 数据库中使用Clob处理长文本
- I can only install jdk1.6 on CentOS 6.5
- Apache+mod_jk+多个tomcat负载均衡
- [注意]SerialPort操作PCI-1621D多串口卡,出现异常"参数不正确"
- iOS 9: UIStackView入门
- 《从零开始学Swift》学习笔记(Day 18)——有几个分支语句?
- free如何知道释放内存长度:vs与glibc分配内存时编译器内部处理