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我想你应该问一个新问题。目前,正如我在问题的评论中所说,本示例中的任何内容都与构造函数无关。