c++ - 如何理解 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
它的作用是存储映射到整数的原始函数指针映射。
附加:为了将函数分配给函数指针,这些东西应该匹配,
- 返回类型。
- 函数的参数。
- 保存函数的对象(这仅适用于成员函数)。
推荐阅读
- python - 如何获取弹性搜索页面增量元素
- autohotkey - 自动热键:绑定
至 在保留某些行为的同时 - excel - 具有过滤值范围的 SUMIF
- c# - 我很想解决我程序中的未知问题
- spring - Azurite 只能使用 http?
- kubernetes - 如何更改calico监听默认端口?
- ios - 你可以用一种颜色为 15x15 网格中的一系列文本视图着色,而另一个用不同的颜色着色吗?
- azure - 在自定义策略中使用显示控件时如何在 mfa 页面上自动填充电子邮件字段
- gatsby - 使用 gatsby-source-filesystem 获取 Excel 文件
- javascript - 创建多参数函数的正确方法