Он называется " Шаблон ".
template <class T>
T *creatClass(){
return new T();
}
Вам придется называть его так:
class InterfaceImpl : public Interface {...};
// ...
InterfaceImpl *newImpl = creatClass<InterfaceImpl>();
отредактировано
Вы также можете попробовать это, чтобы убедиться, что вы только создаете экземпляры Interface
:
template <class T>
Interface *creatClass(){
return new T();
}
редактировать для редактирования
Я пыталсяэтот тестовый код:
#include <iostream>
using namespace std;
class IFrame{
public:
virtual void Create() =0;
};
class Button : public IFrame{
public:
virtual void Create(){ cout << "In Button" << endl;};
};
template <class T>
IFrame *creatClass(){
return new T();
}
int main()
{
IFrame *lol = creatClass<Button>();
lol->Create();
}
Работает точно так, как ожидалось.У вас должны быть другие ошибки кодирования в определениях вашего класса.Отладка, это не имеет ничего общего с вашим первоначальным вопросом.