免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3346 | 回复: 4
打印 上一主题 下一主题

关于模板的explicit specialization [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-08 10:33 |只看该作者 |倒序浏览
最近看c++ primer第三版,16.9节,讲模板的explicit specialization那节,有句话不太明白

Because the explicit specialization definitions for the member functions min() and max() are function definitions and not template definitions, (and because these definitions are not declared inline), they cannot be placed in a header file. They must be placed in a program text file.

想不通为什么就不能放在头文件里面。如果放在头文件中,会引发什么问题呢?请大家多多指点,先行谢过

论坛徽章:
0
2 [报告]
发表于 2010-03-08 10:39 |只看该作者
相当于重复定义

论坛徽章:
0
3 [报告]
发表于 2010-03-08 10:44 |只看该作者
不是吧,你在定义模板那个头文件里面直接explicit specialize其中的某个成员函数,怎么会是重复定义呢

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
4 [报告]
发表于 2010-03-08 20:53 |只看该作者
头文件里通常都不应该放定义。 否则,如果该头文件被多个翻译单元包含,然后这些翻译单元被编译之后再链接到一起时,就会出现重定义符号。

但是, inline和模板都是例外。
编译器(或者链接器)会负责删除(可能出现的)多份定义。

而explicit specialization之后的模板,就不再是一个模板,而是一个普通的函数或者类。
编译器不会负责删除多份定义的工作。
如果将explicit specialization的定义放在头文件中,依然可能会造成重定义符号错误。

论坛徽章:
0
5 [报告]
发表于 2010-03-09 11:32 |只看该作者
豁然开朗,楼上兄台果然厉害,多谢多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP