分配给' void(*)(int)'来自不兼容的类型' void(Button :: *)(int)'

时间:2017-08-04 17:17:17

标签: c++ class pointers

我试图从另一个类设置指向成员函数的指针,但我无法弄清楚如何执行此操作。我有三个类:Control,Button,Textbox。 Button和Textbox有自己的void _Draw(),Control类有一个指向void的指针(* drawFunc(int))

我希望Button和Textbox类都可以访问Control _drawFunc指针,将其设置为_Draw函数。

void Draw1(int t) { 
    printf("%d\n", t);
}

struct Control {
    void (*drawFunc)(int);

    Control() {}
};

struct Button : Control{

    void _Draw(int m) {
        // ... 
    }

    Button() {
        drawFunc = &Button::_Draw; // Draw1 works fine
    }

};

struct Textbox : Control{

    void _Draw(int m) {
        // ... 
    }

    Textbox() {
        drawFunc = &Textbox::_Draw; // Draw1 works fine
    }

};

1 个答案:

答案 0 :(得分:0)

您可以使用function<void(int)> drawFunc代替void (drawFunc*)(int)并使用[this](int i) { this->_Draw(m); }分配它来绑定它,或者将其设置为静态(这没有意义),但对于此类问题,则存在虚拟方法:

struct Control {
    virtual void draw(int) = 0;

    Control() {};
    virtual ~Control() {};
};

struct Button : public Control {
    void draw(int m) final override { // final is optional: if there are no subclasses of buttons
        // ...
    };
};