gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:53:37 26 4
gpt4 key购买 nike

假设我有 fileA.h它声明了一个类 classA带模板函数SomeFunc<T>() .该函数直接在头文件中实现(与模板函数一样)。现在我添加了 SomeFunc() 的专门实现(如 SomeFunc<int>() )在 fileA.C (即不在头文件中)。

如果我现在调用 SomeFunc<int>()来自其他一些代码(可能也来自另一个库),它会调用通用版本还是特化版本?

我现在有这个问题,类和函数存在于一个库中,由两个应用程序使用。一个应用程序正确地使用了特化,而另一个应用程序使用了通用形式(这会导致稍后出现运行时问题)。为什么有区别?这可能与链接器选项等有关吗?这是在 Linux 上,使用 g++ 4.1.2。

最佳答案

错误对调用时不可见的模板进行专门化。不幸的是,编译器不需要诊断这个错误,然后可以对你的代码做他们喜欢的事情(在标准中它是“格式错误,不需要诊断”)。

从技术上讲,您需要在头文件中定义特化,但几乎每个编译器都会按照您的预期处理这个问题:这在 C++11 中通过新的“外部模板”工具得到了修复:

extern template<> SomeFunc<int>();

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

关于c++ - C++ 函数模板特化的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com