2014-10-16 42 views
0

大家好我想要使用此以下設置來創建一個類的實例:的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*之間進行轉換。我如何實現這種轉換(靜態,動態演員表不起作用)

作爲後續問題,有沒有人有任何想法如何使這項工作非空構造?

+0

第二個問題是沒有意義的。此代碼示例中沒有任何內容與構造函數有關。 – clcto 2014-10-16 20:11:51

+1

等一下,我仔細看看,是'Instance'應該是'Interface'嗎?編譯器甚至允許行'virtual void init = 0;'? – clcto 2014-10-16 20:13:13

+0

這可能是我犯了一個錯字,這是實際實現的簡化版本 – Nark 2014-10-16 20:24:10

回答

4

要調用的函數,你加括號:

temp = itor->second(); 
+0

這是一個愚蠢的錯誤,這個問題的第二手仍然存在。 – Nark 2014-10-16 20:27:48

+0

@Nark我想你應該問一個新問題。目前,正如我在問題的評論中所說的,這個樣本中沒有任何東西與構造函數有關。 – clcto 2014-10-16 20:29:46