我试图从另一个类设置指向成员函数的指针,但我无法弄清楚如何执行此操作。我有三个类: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
}
};
答案 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
// ...
};
};