当前位置:  开发笔记 > 编程语言 > 正文

C++函数模板特化的可见性

如何解决《C++函数模板特化的可见性》经验,为你挑选了2个好方法。

假设我有fileA.h一个声明classA具有模板功能的类SomeFunc().此函数直接在头文件中实现(通常用于模板函数).现在我添加一个专门的实现SomeFunc()(比如for SomeFunc())fileA.C(即不在头文件中).

如果我现在SomeFunc()从其他代码调用(也许还来自另一个库),它会调用泛型版本还是专门化版本?

我现在遇到这个问题,类和函数存在于两个应用程序使用的库中.一个应用程序正确使用专门化,而另一个应用程序使用通用形式(稍后会导致运行时问题).为什么不同?这可能与链接器选项等有关吗?这是在Linux上,使用g ++ 4.1.2.



1> Anthony Will..:

对于在调用点处不可见的模板具有专门化是错误的.遗憾的是,编译器不需要诊断此错误,然后可以使用您的代码执行他们喜欢的操作(在标准中它"形成错误,无需诊断").

从技术上讲,您需要在头文件中定义特化,但几乎每个编译器都会按照您的预期处理这个:这在C++ 11中使用新的"extern模板"工具修复:

extern template<> SomeFunc();

这明确声明特定的特化是在别处定义的.许多编译器已经支持这一点,有些是有的,有些没有extern.



2> Serge..:

您是否在头文件中添加了带参数的原型?

我的意思是在fileA.h中有某处

template<> SomeFunc();

如果不是那可能是原因.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有