首页 > 解决方案 > 在这种情况下,如何传递成员函数而不是函数?

问题描述

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

标签: c++ooptypedefmember-function-pointers

解决方案


指向函数的指针和指向成员函数的指针是两个不同的东西。因为有问题的函数是 的成员myClass,所以正确的函数指针类型是:

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

推荐阅读