我試圖創建模板工廠類,導出一個創建方法:dllexport'ing靜態模板方法
template <typename T>
class ClassFactory
{
_declspec(dllexport) static void* Create()
{
return new T;
}
};
class Foobar : ClassFactory<Foobar>
{
std::string foo;
};
此代碼編譯就好了,但我沒有看到在出口表時什麼我看DUMPBIN /出口
下面的代碼創建出口的輸出()正確:
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;
};
不過,我需要創建()是靜態的。爲什麼樣本2有效,而樣本1沒有?有沒有辦法導出靜態模板方法?
您的編譯器不支持模板的外部鏈接。幾乎沒有人會支持它的模塊。導出無法工作,您必須將模板定義移動到頭文件中。 – 2012-04-11 11:00:49