Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从dll导出专用模板函数_C++_Templates_Dll_Dllimport_Dllexport - Fatal编程技术网

C++ 从dll导出专用模板函数

C++ 从dll导出专用模板函数,c++,templates,dll,dllimport,dllexport,C++,Templates,Dll,Dllimport,Dllexport,我在dll的头文件中定义了一个模板函数。我不需要导出该函数,因为所有使用者都将读取头文件并拥有整个函数。但是,我有一个无法在头文件中定义的模板的专门化(否则我将得到重新定义链接器错误),所以它必须在源文件中定义 导出此函数的正常方式是什么 template <typename T> bool functionName(/*params*/){ //..... } template<> IMPORTEXPORTMACRO bool functionName(/*param

我在dll的头文件中定义了一个模板函数。我不需要导出该函数,因为所有使用者都将读取头文件并拥有整个函数。但是,我有一个无法在头文件中定义的模板的专门化(否则我将得到重新定义链接器错误),所以它必须在源文件中定义

导出此函数的正常方式是什么

template <typename T>
bool functionName(/*params*/){
//.....
}

template<> IMPORTEXPORTMACRO
bool functionName(/*params*/);
模板
布尔函数名(/*params*/){
//.....
}
模板导入端口宏
布尔函数名(/*params*/);
并且源文件

template<>
bool functionName(/*params*/){
//...
模板
布尔函数名(/*params*/){
//...
IMPORTEXPORTMACRO
是属于
\u declspec(dllimport)
dllexport


谢谢

< p>模板确实是位置持有者。直到你使用它,编译器不会用真实的(函数/类)东西来代替它。你不能把它放在DLL中。唯一的方法是在头文件中提供它。如果你想隐藏实现,考虑使用类层次结构(运行时多态性)。模板元素确实是位置持有者。直到使用它,编译器才不会用真实的(函数/类)东西来替换它。你不能把它放在DLL中。唯一的方法是在头文件中提供它。如果你想隐藏实现,考虑使用类层次结构(运行时多态性)。

您不能将专用函数内联吗?这样就避免了标题错误。然后,我会从多次定义的函数中得到错误。您能简单地显示代码吗(您不需要显示整个实现或任何东西)当我说inline时,你是在指定
inline
对吗?@bdwain:如果你真的将函数标记为
inline
,也就是说,用
inline
关键字来修饰它,你就不会这样做。前两件事在标题中,最后一件在源文件中。你不能只将专用函数内联吗?这样就避免了然后我从被多次定义的函数中得到错误。你能简单地显示你的代码吗(你不需要显示整个实现或任何东西)。当我说inline时,你是在指定
inline
对吗?@bdwain:如果你真的将函数标记为
inline
,也就是说,用
inline
关键字修饰它,你就不会这样做。前两件事在标题中,最后一件在源文件中