C++ std::函数实例创建

C++ std::函数实例创建,c++,c++11,C++,C++11,大家好,我正在尝试使用以下设置创建类的实例: class Interface { Interface(){} virtual void init =0; }; class InstanceCreation { void registerInstance(const std::string& name, std::function<Interface*(void)> interface ) { functionMap[name] = interfac

大家好,我正在尝试使用以下设置创建类的实例:

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;

};
该错误描述了未能在
std::function
Instance*
之间转换。如何实现此转换(静态、动态强制转换不起作用)


作为后续问题,是否有人知道如何为非空构造函数实现此功能?

要调用此函数,请添加括号:

temp = itor->second();

要调用该函数,请添加括号:

temp = itor->second();

第二个问题毫无意义。这个代码示例中的任何内容都与构造函数无关。等等,我正在仔细观察,
实例
应该是
接口
?编译器是否允许行
virtualvoidinit=0?这可能是我的输入错误。这是实际实现的简化版本。请确保运行并测试您发布给我们的版本。@Nark第二个问题毫无意义。这个代码示例中的任何内容都与构造函数无关。等等,我正在仔细观察,
实例
应该是
接口
?编译器是否允许行
virtualvoidinit=0?这可能是我的输入错误。这是实际实现的简化版本。请确保运行并测试您发布给我们的版本。@Nark Man这是一个愚蠢的错误,这个问题的第二手仍然有效。@Nark我想您应该问一个新问题。目前,正如我在问题的评论中所说,这个示例中的任何内容都与构造函数无关。伙计,这是一个愚蠢的错误,这个问题的第二手仍然有效。@Nark我想你应该问一个新问题。目前,正如我在问题的评论中所说,本示例中的任何内容都与构造函数无关。