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

它是签名函数的函数指针的类型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 回答