有人可以为我解释一下Base*(*)()吗:
typedef std::map<std::string, Base*(*)()> map_type;
以及如何从函数中返回它?
我假设它是一个函数指针,返回一个 Base*,但这是什么 (*)。
我在下面的 SO 帖子中发现了这一点。有没有办法从保存类名的字符串中实例化对象?
谢谢
有人可以为我解释一下Base*(*)()吗:
typedef std::map<std::string, Base*(*)()> map_type;
以及如何从函数中返回它?
我假设它是一个函数指针,返回一个 Base*,但这是什么 (*)。
我在下面的 SO 帖子中发现了这一点。有没有办法从保存类名的字符串中实例化对象?
谢谢
Base* (*)()
是一种类型:指向函数返回的指针Base*
。这*
意味着它是一个指针,并且()
用于覆盖优先级以确保指针适用于函数本身而不是返回类型。
您可以通过返回适当类型的函数的名称从函数中返回它。
例如
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();"