如何解决如何理解 cls* (*) (int, double)
我正在研究一些从互联网上抓取的源代码,发现一个混淆的句子。
map<int,Element* (*) (int,Domain*) > elemList
我的问题是关于 elemList 的值部分。是指针吗?还是构造函数?还是别的?
最好的问候
解决方法
Element* (*) (int,Domain*)
用于函数指针。它们有两种类型。
- 原始函数指针(类似于:
void (*foo)(int x,int y);
)。 - 成员函数指针(看起来像这样:
void (Object::*foo)(int x,int y);
)。
在原始函数指针中,它由 3 部分组成。让我们使用上面的例子,
- 返回类型(
void
)。 - 函数名称/指针名称(即
foo
)。 - 函数参数(即
(int x,int y)
)。
在成员函数指针中,它由 4 部分组成。
- 返回类型(
void
)。 - 哪个类/结构保存函数(
Object
)。 - 函数名称/指针名称(即
foo
)。 - 函数参数(即
(int x,int y)
)。
调用原始函数指针就这么简单,
void Func(int x,int y) { ... }
void (*foo)(int x,int y) = Foo; // Assigning the function pointer.
foo(); // Calling the pointer.
调用成员函数指针略有不同。为此,您需要一个有效的对象实例。
class Object {
public:
void Func(int x,int y) { ... }
};
void (Object::*foo)(int x,int y) = &Object::Func; // Assigning the function pointer. Notice the '&' operator here.
Object object;
(object.*foo)(); // Calling the function pointer.
那么 map<int,Element* (*) (int,Domain*) > elemList
的作用是存储原始函数指针映射到整数的映射。
附加:为了将函数分配给函数指针,这些东西应该匹配,
- 返回类型。
- 函数的参数。
- 保存函数的对象(这仅适用于成员函数)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。