我想知道是否可以定义一个模板化的 dllexport 函数。到目前为止,该功能还没有模板化,并且可以正常工作。代码是这样的:
模块.cpp:
#if defined(__cplusplus)
#define DLL_Export extern "C" __declspec(dllexport)
#else /* __cplusplus */
#define DLL_Export __declspec(dllexport)
#endif /* __cplusplus */
...
VirtualTPM * virtual_tpm;
...
DLL_Export void TestPointModule_Check(string name, void * value){
virtual_tpm->CheckTestPoint(name, value);
}
但是,我需要扩展 TestPointModule_Check 函数来管理其他数据类型,所以我创建了一个模板化的 CheckTestPoint(...) 函数,我尝试了这个:
模块.cpp:
...
template <typename T>
DLL_Export void TestPointModule_Check(string name, void * value){
virtual_tpm->CheckTestPoint<T>(name, value);
}
但这给了我以下错误:error C2988: unrecognizable template declaration/definition
VirtualTPM::CheckTestPoint<T>
已正确定义,因为我可以调用 virtual_tpm->CheckTestPoint<int>(name, value);
没有错误。
有没有办法做我需要的事情?我可以将模板限制为 4 种不同的数据类型(事实上,我在为 VirtualTPM::CheckTestPoint<T>
函数定义模板时这样做了,但我不知道该怎么做。
最佳答案
模板函数在实例化之前不存在。因此,这意味着您只能导出其实例,而不能导出模板本身。
但是如果您将模板定义放在 header 中,您通常可以在其他项目中使用它 - 就像您对仅 header 的库所做的一样。
编辑: 未经测试的示例(这应该从 DLL 导出函数):
模块.h:
template <typename T>
DLL_Export void TestPointModule_Check(string name, T * value);
模块.cpp:
template <typename T>
DLL_Export void TestPointModule_Check(string name, T * value){
virtual_tpm->CheckTestPoint<T>(name, value);
}
// explicit instantiation
template void TestPointModule_Check<SomeType>(string name, SomeType * value);
关于c++ - 带模板的 dllexport 函数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19683935/