4

我想从 DLL中导出模板函数。我知道我可以使用以下模板专业化方法。
函数.hpp
/*declare*/
template<typename T> DLL_EXPORTS T func(T para);
/*specialization*/
template<> DLL_EXPORTS int func<int>(int para);

函数cpp
template<> DLL_EXPORTS int func<int>(int para)
{return para;}

如果我使用模板专业化。func我应该为每种类型重写代码。这不是一个好的解决方案。但这是我能从C++ Primer.
我偶尔会从别人的代码中找到另一种方法,如下所示。

函数.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++ 标准是否支持它?

4

1 回答 1

1

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

您可以在您的翻译单元中尽可能多地实例化您想要的具有任何类型的模板实例,并且此代码将被放置到您的 DLL 中。而其他一切都不会。

于 2012-12-11T02:19:22.983 回答