在这种情况下,如何传递成员函数而不是函数? [复制]
Posted
技术标签:
【中文标题】在这种情况下,如何传递成员函数而不是函数? [复制]【英文标题】:How can I pass a member function instead of a function in this situation? [duplicate] 【发布时间】:2018-10-04 16:56:18 【问题描述】:我在一个类中使用一个对象来实现它的功能。这个对象的类定义的头部包含一个 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'还没有被声明”。
相反,我将研究仿函数和 std::function 库。
【问题讨论】:
我不确定你的问题到底是什么。 typedef 是指向函数的指针,而不是指向成员函数的指针,除此之外我不明白为什么要传递指向成员函数的指针,为什么不传递类的实例? 我已经编辑了标题以提及我正在尝试做的事情。 你标题的答案是:你不能。 但是typedef在Bar类头文件中,不知道怎么写才能考虑到成员函数的类。 【参考方案1】:指向函数的指针和指向成员函数的指针是两个不同的东西。因为有问题的函数是myClass
的成员,所以正确的函数指针类型是:
typedef void (myClass::*Foo)(int arg);
【讨论】:
以上是关于在这种情况下,如何传递成员函数而不是函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章