您的位置:首页 > 其它

[原创]简单讲一下类成员函数指针的用法

2011-05-14 22:22 309 查看
简单讲一下类成员函数指针的用法
最近在写关于控件的东西,所以用到一些事件响应方面的处理。以前的用法都是

typedef void (*PFNMEDIAPLAYNOTIFY)(void *pValue);
把pValue 当做当前类的指针传递回一个类外面的函数,而在类外面写函数,对于封装来讲就感觉很唐突,也很难管理。
简单研究了一些文章,用到了一个很有效的方法类成员函数指针
定义形式为:
typedef void (CWnd::*FUNCBTCLICK)();
采用类名::然后跟函数的指针的形式,然后在另一个类里面直接 类对象指针->*func指针的形式进行调用。
下面讲一个实际应用中的例子:
//Button.h
typedef void (CWnd::*FUNCBTCLICK)();//
class CButton //Button类的定义
{
public:
CButton (CWnd * cls){m_pClass = cls;}
void setOnClick(FUNCBTCLICK func)
{
m_funBTClick= func;
}
void onClick()
{
(m_pClass->*m_funBTClick)();//调用事件通知函数
}
/*省略其他处理函数*/
private:
CWnd *m_pClass;
FUNCBTCLICK m_funBTClick;
}

//Menu.h

class CMenuWnd:public CWnd
{
public:
CMenuWnd()
{
m_pBT = new CButton(this);
m_pBT->setOnClick((FUNCBTCLICK )&CMenuWnd::onClick);
}

void onClick()
{
//当按钮收到被点击消息后的处理
}
private:
CButton *m_pBT;
}

这样既可把处理函数写在类里面,更好的管理了!

by 狮子
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: