4

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 ++標準でサポートされていますか?

4

1 に答える 1

1

はい、明示的なインスタンス化と呼ばれています。C++ 11標準の14.7.2を参照してください(申し訳ありませんが、近くにC ++ 03がありません)。

テンプレートのインスタンスを任意のタイプで好きなだけインスタンス化でき、このコードはDLLに配置されます。そして、他のすべてはそうではありません。

于 2012-12-11T02:19:22.983 に答える