我想从DLL导出模板函数.我知道我可以使用模板专业化方法如下.
func.hpp
/*宣布*/
模板< typename T>
DLL_EXPORTS T func(T para);
func.hpp
/*宣布*/
模板< typename T>
DLL_EXPORTS T func(T para);
/*专业化*/
模板<>
DLL_EXPORTS int func< int>(int para);
func.cpp
模板<>
DLL_EXPORTS int func< int>(int para)
{return para;}
如果我使用模板专业化.我应该为每种类型重写func代码.这不是一个好的解决方案.但这是我从C Primer中找到的唯一方法.
我偶尔会从其他人的代码中找到另一种方法,如下所示.
func.hpp
/*宣布*/
模板< typename T>
DLL_EXPORTS T func(T para);
func.cpp
模板< typename T>
DLL_EXPORTS T func(T para)
{return para;}
/ * *实例化/
模板
DLL_EXPORTS int func< int>(int);
他使用模板DLL_EXPORTS int func< int>(int)来实例化模板.你无法添加<>在关键字模板之后.这种方式也适用于类模板.
解决方法
是的,它叫做明确的实例化见C 11标准的14.7.2(抱歉我附近没有C 03).
您可以在翻译单元中实例化您希望模板的实例与您想要的任何类型,并且此代码将被放入您的DLL中.其他一切都不会.