是否有人可以解釋基地*(*)()我在:什麼是基礎*(*)()
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?
由於
是否有人可以解釋基地*(*)()我在:什麼是基礎*(*)()
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?
由於
Base* (*)()
是一種類型的發現這個。 *
表示它是一個指針,並且()
用於覆蓋優先級,以確保指針適用於函數本身而不是返回類型。
您可以通過返回適當類型的函數的名稱從函數返回它。
E.g.
Base* f();
Base* (*g())()
{
return f;
}
它的簽名Base*()
的函數的函數指針的類型:
Base * foo();
Base * (*fp)() = &foo;
或者你的情況:
map_type callbacks;
callbacks["Foo"] = &foo;
要調用:
Base * p = callbacks["Foo"](); // same as "p = foo();"
感謝您的幫助,很遺憾,由於缺乏積分,我無法對您的答案進行投票。 – 2012-08-05 15:28:39
[ cdecl](http://cdecl.org/)說'Base *(*)()'i這是一個語法錯誤,很有趣。 – fredoverflow 2012-08-05 14:12:38
@FredOverflow:我認爲我們必須假設'Base'被定義爲一個類型。 – 2012-08-05 14:16:43
@FredOverflow:基於抽象基類。 – 2012-08-05 14:54:00