c++ - GCC 中的模板实例化与 Visual C++ 不同
问题描述
我无法将在 Visual Studio 2017 C++ 中的 Windows 上运行良好的代码移植到带有 GCC 8.2 的 Linux 上。
#include <stdio.h>
class A
{
public:
int value;
};
template<typename T> int GetValue(T value);
template<typename T> int GetValue(A value)
{
return value.value;
}
template int GetValue<A>(A value);
int main(int argc, char **argv)
{
A valueHolder;
valueHolder.value = 42;
int value = GetValue(valueHolder);
printf("hello %d!", value);
return 0;
}
它在 Windows 上以正确的输出编译和运行,但在 Linux 上,我在主函数中使用GetValue 时收到一个编译错误,其中未定义对“int GetValue(A)”的引用。
我的真实案例实际上更复杂,模板代码位于链接的库中。即使在使用“nm”检查时我可以看到实例化模板函数位于库中,我也会收到链接错误。
如何让这种类型的模板实例化与 GCC 一起使用?
解决方案
定义特化时,您需要删除类型参数...将代码从
template<typename T> int GetValue(A value)
{
return value.value;
}
至
template<> int GetValue(A value)
{
return value.value;
}
一切都会按预期进行
推荐阅读
- javascript - 创建一个不和谐的机器人。(Javascript)
- matlab - 图像对象的宽度和高度 - Matlab
- javascript - 我正在尝试在部分代码之间设置超时,但语法忽略了暂停
- r - geom_bar():从总观测值中绘制子组的频率
- linux - 我们如何防止 CTRL-C 终止屏幕?
- laravel - Bootstrap Installed and working fine but custom styling doesn't works
- c - What should be the right usage of strncpy_s() - secure string copy - to handle all the possible corner cases?
- dialogflow-es - How can I handle non-text messages with Dialogflow?
- numpy - 在numpy中选择具有可变索引范围的数组元素
- c# - Angular Synchronous operations in API