【发布时间】:2017-05-24 13:53:32
【问题描述】:
我写了一个类模板并在不同的 DLL 中使用它,所以希望隐藏部分实现。
为此,我使用“模板实例化”,但是导出它,像这样,这里是头文件:
#include <iostream>
#include <exception>
using namespace std;
template<typename T>
class __declspec(dllexport) Templated
{
public:
Templated();
};
template __declspec(dllexport) Templated<int>;
int main()
{
cout << "Hello World" << endl;
}
并且定义在一个单独的文件(.cpp)中
template<typename T>
Templated<T>::Templated() {}
template Templated<int>;
我的问题是我收到了警告,即使实例化被标记为导出!
您可以在这里测试此代码:http://webcompiler.cloudapp.net/,它会生成 C4661 警告!
这正常吗?
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/a/14138629/1450890
-
你不需要在显式实例化中使用
__declspec(dllexport)。 -
是的,我需要它...我导出我的模板,否则我链接问题!
-
您的网络编译器链接显示了一个 Hello World 程序。 ....
标签: c++ c++11 templates visual-c++ visual-studio-2017