create メソッドをエクスポートするテンプレート化されたファクトリ クラスを作成しようとしています。
template <typename T>
class ClassFactory
{
_declspec(dllexport) static void* Create()
{
return new T;
}
};
class Foobar : ClassFactory<Foobar>
{
std::string foo;
};
このコードは正常にコンパイルされますが、 dumpbin /exportsの出力を見るとエクスポート テーブルに何も表示されません。
次のコードは、Create() を正しくエクスポートします。
class ClassFactoryBase
{
_declspec(dllexport) virtual void* Create() = 0;
};
template <typename T>
class ClassFactory : ClassFactoryBase
{
void* Create()
{
return new T;
}
};
class Foobar : ClassFactory<Foobar>
{
std::string foo;
};
ただし、Create() を静的にする必要があります。サンプル 2 は機能するのに、サンプル 1 は機能しないのはなぜですか? 静的テンプレート メソッドをエクスポートする方法はありますか?