在这种情况下,如何传递成员函数而不是函数?

时间:2018-10-04 16:56:18

标签: c++ oop typedef member-function-pointers

我正在使用类中的对象来实现其功能。该对象的类定义的头包含一个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库。

1 个答案:

答案 0 :(得分:1)

指向函数的指针和指向成员函数的指针是两个不同的事物。由于所讨论的函数是myClass的成员,因此正确的函数指针类型为:

typedef void (myClass::*Foo)(int arg);