2

誰かが私のためにBase*(*)()を次のように説明してもらえますか:

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

そして、関数からどのように返すのでしょうか?

私はそれが関数ポインタであると推測し、Base* が返されますが、これは何ですか (*)。

次の SO 投稿でこれを見つけましたクラス名を保持している文字列からオブジェクトをインスタンス化する方法はありますか?

ありがとう

4

2 に答える 2

7

Base* (*)()型: を返す関数へのポインタBase*。は*、それがポインターであることを意味し()、ポインターが戻り値の型ではなく関数自体に適用されるように、優先順位をオーバーライドするために使用されます。

適切なタイプの関数の名前を返すことにより、関数からそれを返すことができます。

例えば

Base* f();

Base* (*g())()
{
    return f;
}
于 2012-08-05T13:51:21.200 に答える
4

signature の関数の関数ポインタの型ですBase*():

Base * foo();

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

またはあなたの場合:

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

呼び出す:

Base * p = callbacks["Foo"]();  // same as "p = foo();"
于 2012-08-05T13:52:29.587 に答える