c ++成员函数的回调

时间:2014-02-08 22:12:14

标签: c++ pointers callback

#include<iostream>

class Bar;

class Foo{
public:
    void (Bar::*callback)(void);
    Bar* bar;
    Foo(Bar* bar, void (Bar::*cb)(void)){
        callback = cb;
    }
    void execute(){
        (bar->*callback); // commenting out this will make it compile
        // i want to execute callback here, but can't find a way to do it
    }
};

class Bar{
public:
    Foo *f;

    Bar(){
        f = new Foo(this, &Bar::func);
        f->execute();
    }

    void func(){ // this can't be static
        std::cout << "func executed" << std::endl;
    }
};

int main(){
    Bar b;

    return 0;
}

这就是我想要做的,我需要为一个按钮进行回调。 但我无法调用成员函数指针。

或者我应该使用另一种方法来获得此功能?

编辑:我得到的错误是“无效使用非静态成员函数” 使功能静态不是一种选择。

1 个答案:

答案 0 :(得分:0)

(bar->*callback);

你不是在这里调用这个函数,只是取消引用它:

(bar->*callback)();
//              ^^