c++ - 在这种情况下,如何传递成员函数而不是函数?
问题描述
我在一个类中使用一个对象来实现它的功能。该对象的类定义的标题包含一个 typedef,然后是类声明:
typedef void (*Foo)(int arg);
class Bar
{private : double func(Foo f){};}
在我的课堂上,我想创建一个成员函数将其传递给 func :
class myClass
{
private :
Bar bar;
void my_func(int arg);
void my_caller();
};
在 .cpp 中:
void myClass::my_caller()
{
bar.func(&myClass::my_func);
}
它返回一个错误“没有匹配的函数来调用 Bar::func ...”。我的理解是typedef中使用的类型不是“指向成员函数的指针”而是“指向函数的指针”。我想我必须改变这个 typedef 来改变这个,但我不知道怎么做。
我是 C++ 的绝对初学者,所以我可能在这里偏离轨道。
编辑 :
我理解我必须对 typedef 进行更改以创建指向成员函数的指针。问题是这个 typedef 在一个不同的头文件中,所以编译器返回“'myClass' has not been declared”。
相反,我将研究仿函数和 std::function 库。
解决方案
指向函数的指针和指向成员函数的指针是两个不同的东西。因为有问题的函数是 的成员myClass
,所以正确的函数指针类型是:
typedef void (myClass::*Foo)(int arg);
推荐阅读
- image - 如何从 Windows 剪贴板中获取图像数据
- git - 仅为 git log 设置漂亮的格式
- linux - 阻止用户查看公用文件夹
- python - 将渐变样式应用于多个子集中的 pandas DataFrame
- c# - 在 IServiceCollection.AddLogging (C#/.net Core) 中获取服务
- c# - Unity GameObject OnclickEvent
- mongodb - 在节点/快递中包含插入的数据(如 ObjectId)以响应
- docker - kubernetes 无法转发端口
- r - 对基因表达数据中的簇数使用 NbClust 不起作用
- lua - 我如何在这个 roblox lua 脚本中修复多人游戏?