Я пытаюсь создать шаблонный класс фабрики, который экспортирует создать метод:dllexport'ing статический метод шаблон
template <typename T>
class ClassFactory
{
_declspec(dllexport) static void* Create()
{
return new T;
}
};
class Foobar : ClassFactory<Foobar>
{
std::string foo;
};
Этот код компилируется нормально, но я не вижу ничего в таблице экспорта когда это Я смотрю на выходе Dumpbin/экспорт
экспорт следующий код 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;
};
Однако, мне нужно создать(), чтобы быть статичным. Почему работает образец 2, а образец 1 - нет? Есть ли способ экспортировать статический шаблон?
Ваш компилятор не поддерживает внешнюю связь для шаблонов. Мало кто делает, никто не поддержит его для модуля. Экспорт не может работать, вы должны переместить определения шаблонов в файл заголовка. –