linux查看c类成员函数,函数指针调用类的成员函数

今天在模块中为了避免重复代码,以及方便以后的扩展,我决定用函数指针来管理所有相同功能的函数,由于底层函数的接口写死了,也只能这么做了。大概如下:

class CWndEquipDye : public CEquipRebuilderWnd

{

typedef void(*SLIDEFUN)(DWORD);

friend CEquipRebMgrListener;

public:

CWndEquipDye ();

virtual ~CWndEquipDye() {};

public:

virtual BOOL Create(IResObject *pResCript);

virtual void OnPaint(ICanvas* pCanvas);

public:

//

// @Description: 更新当前角色形象

// @Input Para: NONE

// @Return Value: NONE

//

void RefreshPreview();

//

// @Description: 拖动颜色滚动条的回调函数,红 绿 蓝

// @Input Para: dwParam->控件传递的值

// @Return Value:NONE

//

void OnSlideRedPosChange(DWORD dwParam);

void OnSlideGreenPosChange(DWORD dwParam);

void OnSlideBluePosChange(DWORD dwParam);

private:

enum SLIDE

{

SLIDE_RED = 0,

SLIDE_GREEN,

SLIDE_BLUE,

SLIDE_MAX,

};

DWORD m_dwSlideValue[SLIDE_MAX];

XSlideBar* m_pSlideBar[SLIDE_MAX];

SLIDEFUN m_arrSlideFun[SLIDE_MAX];

};

m_arrSlideFun[0] = OnSlideRedPosChange;

m_arrSlideFun[1] = OnSlideRedPosChange;

m_arrSlideFun[2] = OnSlideRedPosChange;

但是在这儿初始化的时候,报错:error C2440: '=' : cannot convert from 'void (__thiscall CWndEquipDye::*)(unsigned long)' to 'void (__cdecl *)(unsigned long)'

There is no context in which this conversion is possible

立马google,后来才明白是:在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用于指针的声明,而"->*"和".*"用来调用指针指向的函数。

这篇文章写的很好,还初步介绍了Delegate委托的概念,又让自己长了不少见识。还有一篇比较好的文章,先贴在这里http://www.codeproject.com/KB/cpp/FastDelegate.aspx有时间好好看看。

BTW:晚上准备和MM一起去欢乐谷玩,特留贴纪念这个不是光棍的光棍节!

posted on 2010-10-20 10:27 zuhd 阅读(738) 评论(0)  编辑 收藏 引用 所属分类: c/c++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值