首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

命名空间与模板特化解决思路

2013-01-07 
命名空间与模板特化C++ PRIMER上说:可用在外部定义命名空间成员相同的方式来定义其中的模板特化,又说须保

命名空间与模板特化
C++ PRIMER上说:可用在外部定义命名空间成员相同的方式来定义其中的模板特化,又说须保证在包含原始模板定义的命名空间中定义特化,是否矛盾?后一句是否应为:须保证在包含原始模板定义的命名空间的作用域中定义特化
[解决办法]
呵呵,还是没明白你说什么。anyway,#2 的程序产生编译错误,必须打开注释掉的那个声明,才能编译通过。

你没说你看的那个版本的 c++ primer,也没说是翻译的还是原版的,不过我翻了一下我的 c++ primer 5,这是我找到的与你说的最相关的陈述 18.2.1 :
 
Template specializations must be defined in the same namespace that contains the original template (§ 16.5, p. 709). As with any other namespace name, so long as we have declared the specialization inside the namespace, we can define it outside the namespace:

这句话与你主楼哪句话说的基本一样,不过有一个重要且可能导致不同理解的区别:我引用的句子说的是模板特化的声明必须要出现在原命名空间中,而该特化的定义可以出现在命名空间外。你在主楼的说法好像是特化的声明和定义都要出现在原命名空间中,这种理解是不正确的,不知道是翻译(如果你看的是翻译版)的问题,还是你自己理解的问题。

#2 的程序之所以把注释打开以后就能够编译,恰恰是因为该注释是模板特化的声明,c++ 要求声明必须出现在原命名空间。

ps. c++ primer 作者是大师级的猛人,不太可能犯你说的那些低级错误。

热点排行