大家好我想要使用此以下設置來創建一個類的實例:的std ::函數實例創建
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*
之間進行轉換。我如何實現這種轉換(靜態,動態演員表不起作用)
作爲後續問題,有沒有人有任何想法如何使這項工作非空構造?
第二個問題是沒有意義的。此代碼示例中沒有任何內容與構造函數有關。 – clcto 2014-10-16 20:11:51
等一下,我仔細看看,是'Instance'應該是'Interface'嗎?編譯器甚至允許行'virtual void init = 0;'? – clcto 2014-10-16 20:13:13
這可能是我犯了一個錯字,這是實際實現的簡化版本 – Nark 2014-10-16 20:24:10