我想从DLL导出模板函数。我知道我可以使用模板专业化方法如下
的 func.hpp
/*declare*/
template<typename T>
DLL_EXPORTS T func(T para);
/*specialization*/
template<>
DLL_EXPORTS int func<int>(int para);
func.cpp
template<>
DLL_EXPORTS int func<int>(int para)
{return para;}
如果我使用模板专业化。我应该为每种类型重写func
代码。这不是一个好的解决方案。但这是我从C++ Primer
找到的唯一方法
我偶尔会从其他人的代码中找到另一种方法,如下所示。
func.hpp
/*declare*/
template<typename T>
DLL_EXPORTS T func(T para);
func.cpp
template<typename T>
DLL_EXPORTS T func (T para)
{return para;}
/*Instantiation*/
template
DLL_EXPORTS int func<int>(int);
他使用template DLL_EXPORTS int func<int>(int)
来实例化模板。您无法在关键字<>
之后添加template
。这种方式也适用于类模板。
我的问题:我无法在书中找到方法。所以我担心它有时不起作用。 是否受C ++标准支持?
答案 0 :(得分:1)
是的,它称为显式实例化请参阅C ++ 11标准的14.7.2(抱歉,我附近没有C ++ 03)。
您可以在翻译单元中实例化您希望模板的实例与您想要的任何类型,并且此代码将被放入您的DLL中。其他一切都不会。