如何指定类方法的指针? (代表?) [英] How to assign pointer to class method? (delegates?)

查看:68
本文介绍了如何指定类方法的指针? (代表?)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在类Button中:public Widget我有:void(Window :: * OnClick)()= NULL;

In class Button : public Widget I have: void (Window::*OnClick)() = NULL;

在类Window中是on_click_base(): 

In class Window is on_click_base(): 

class Window : public Widget
{
public:
    Window(Widget* parent);
    virtual ~Window();
    void show();
    void on_click_base() {}
};


但我更喜欢

but I prefer

class MyWindow : public Window
{
public:
	MyWindow() : Window(nullptr) {}
	void on_click() {
		Dialogs::message_box(L"here click");
	}
};

是错误:

button2.OnClick = window.on_click_base; //非标准语法;使用'&'创建指向成员的指针   

button2.OnClick = window.on_click_base; //non-standard syntax; use '&' to create a pointer to member   

button2.OnClick =& window.on_click_base; //对绑定成员函数表达式的非法操作

button2.OnClick = &window.on_click_base;//illegal operation on bound member function expression

如何做委托之类的事情?

How do anything like delegates?

推荐答案

On 8 / 13/2017 2017年5月33日,AndrzejBorucki写道:

On 8/13/2017 5:33 PM, AndrzejBorucki wrote:


是错误:



button2 .OnClick = window.on_click_base; //非标准语法;使用'&'创建指向成员的指针



button2.OnClick =& window.on_click_base; //对绑定成员函数表达式的非法操作

Are errors:

button2.OnClick = window.on_click_base; //non-standard syntax; use '&' to create a pointer to member

button2.OnClick = &window.on_click_base;//illegal operation on bound member function expression

button2.OnClick =& Window :: on_click_base;

button2.OnClick = &Window::on_click_base;

请注意,像OnClick这样的指向成员的指针仅指成员函数,但是不是要调用它的对象。需要单独存储指向所述对象的指针或引用。

Note that pointer-to-member like your OnClick only refers to a member function, but not to an object on which to call it. A pointer or reference to said object would need to be stored separately.


这篇关于如何指定类方法的指针? (代表?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆