2012-08-05 122 views
2

是否有人可以解釋基地*(*)()我在:什麼是基礎*(*)()

typedef std::map<std::string, Base*(*)()> map_type;

而且一個如何從一個函數返回呢?

我假設它是一個函數指針,返回一個Base *,但是這是什麼(*)。指針函數返回Base*

我在以下SO張貼Is there a way to instantiate objects from a string holding their class name?

由於

+0

[ cdecl](http://cdecl.org/)說'Base *(*)()'i這是一個語法錯誤,很有趣。 – fredoverflow 2012-08-05 14:12:38

+0

@FredOverflow:我認爲我們必須假設'Base'被定義爲一個類型。 – 2012-08-05 14:16:43

+0

@FredOverflow:基於抽象基類。 – 2012-08-05 14:54:00

回答

7

Base* (*)()是一種類型的發現這個。 *表示它是一個指針,並且()用於覆蓋優先級,以確保指針適用於函數本身而不是返回類型。

您可以通過返回適當類型的函數的名稱從函數返回它。

E.g.

Base* f(); 

Base* (*g())() 
{ 
    return f; 
} 
4

它的簽名Base*()的函數的函數指針的類型:

Base * foo(); 

Base * (*fp)() = &foo; 

或者你的情況:

map_type callbacks; 
callbacks["Foo"] = &foo; 

要調用:

Base * p = callbacks["Foo"](); // same as "p = foo();" 
+0

感謝您的幫助,很遺憾,由於缺乏積分,我無法對您的答案進行投票。 – 2012-08-05 15:28:39

相關問題