如何在C ++中实例化模板

时间:2012-12-11 02:13:13

标签: c++ templates

我想从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 ++标准支持?

1 个答案:

答案 0 :(得分:1)

是的,它称为显式实例化请参阅C ++ 11标准的14.7.2(抱歉,我附近没有C ++ 03)。

您可以在翻译单元中实例化您希望模板的实例与您想要的任何类型,并且此代码将被放入您的DLL中。其他一切都不会。