Привет всем Я пытаюсь создать экземпляр класса, используя следующую настройку:
class Interface
{
Interface(){}
virtual void init =0;
};
class InstanceCreation
{
void registerInstance(const std::string& name, std::function<Interface*(void)> interface )
{
functionMap[name] = interface
}
Interface* getInstance(const std::string& name)
{
Interface* temp;
auto itor = functionMap.find(name);
temp = itor->second;
return temp;
}
std::map<std::string, std::function<Interface*(void)> > functionMap;
};
Это не удается скомпилировать из-за строки:
temp = itor->second;
Ошибка описывает неявное скрытие между std::function<Interface*(void)>
и Instance*
. Как достичь этого преобразования (статические, динамические приведения не работают)
В качестве последующего вопроса к этому кто-нибудь имеет идеи, как сделать эту работу для непустых конструкторов?
Чтобы вызвать функцию, вы добавляете скобку:
temp = itor->second();
Instance
бытьInterface
? Разрешает ли компилятор строкуvirtual void init =0;
?