std :: Создание экземпляра функции

0

Привет всем Я пытаюсь создать экземпляр класса, используя следующую настройку:

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*. Как достичь этого преобразования (статические, динамические приведения не работают)

В качестве последующего вопроса к этому кто-нибудь имеет идеи, как сделать эту работу для непустых конструкторов?

  • 0
    Второй вопрос не имеет смысла. Ничто в этом примере кода не имеет ничего общего с конструкторами.
  • 1
    Подожди, я смотрю поближе, должен ли Instance быть Interface ? Разрешает ли компилятор строку virtual void init =0; ?
Показать ещё 4 комментария
Теги:
c++11

1 ответ

4
Лучший ответ

Чтобы вызвать функцию, вы добавляете скобку:

temp = itor->second();
  • 0
    Человек, который был глупой ошибкой, секундная стрелка этого вопроса все еще стоит.
  • 0
    @ Я думаю, тебе стоит задать новый вопрос. В настоящее время, как я отмечал в комментариях к вопросу, ничего в этом примере не имеет ничего общего с конструкторами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню