小弟刚入C++大门,看代码看到一处宏定义,看不懂,向各位老师请教#define iDelegateOverride(pThat,tag,pThis,pFunc) *(void**)&(pThat)->_pfn##tag._pFunc=(void*)(pFunc);*(void**)&(pThat)->_pfn##tag._pThis=(void*)(pThis)基础一般,请详细介绍,让各位见笑了。

解决方案 »

  1.   

    ## 是字符串连接的意思_pfn##tag,如果tag输入的  HelloWorld,则表示_pfnHelloWorld
    iDelegateOverride( 111 , 222, 333, 444 )会变成*(void**)&(111)->_pfn222._444 = (void*)(444);
    *(void**)&(111)->_pfn222._333=(void*)(333) 
      

  2.   

    我是能说语法上能看懂##是Token-Pasting连接,其他没什么特别的但怎么还有一个“;”?你贴错了?
      

  3.   

    上面那个_pThis应该不被替换。
      

  4.   


    实际代码中是这么调用的
    iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey);HotKey 是对像,OnHotKey是方法,this是拥有HotKey的对像,HotKey_OnHotKeythis.方法那么这句到底是什么意思呢
      

  5.   

    #define iDelegateOverride(pThat,tag,pThis,pFunc) *(void**)&(pThat)->_pfn##tag._pFunc=(void*)(pFunc);*(void**)&(pThat)->_pfn##tag._pThis=(void*)(pThis)
    iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey); 变成*(void**)&(pThat)->_pfn##tag._pFunc=(void*)(pFunc); //这个;是宏里面的*(void**)&(pThat)->_pfn##tag._pThis=(void*)(pThis); //这个;不是宏里面的再变成
    *(void**)&(&HotKey)->_pfn##tag._pFunc=(void*)(pFunc); //这个;是宏里面的*(void**)&(&HotKey)->_pfn##tag._pThis=(void*)(pThis); //这个;不是宏里面的再变成
    *(void**)&(&HotKey)->_pfnOnHotKey._pFunc=(void*)(pFunc); //这个;是宏里面的*(void**)&(&HotKey)->_pfnOnHotKey._pThis=(void*)(pThis); //这个;不是宏里面的再变成
    *(void**)&(&HotKey)->_pfnOnHotKey._pFunc=(void*)(HotKey_OnHotKey); //这个;是宏里面的*(void**)&(&HotKey)->_pfnOnHotKey._pThis=(void*)(this); //这个;不是宏里面的////////////////
    基本上就是给this的HotKey这个变量设置了一个参数HotKey_OnHotKey。
      

  6.   

     iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey);HotKey 是对像,OnHotKey是方法,this是拥有HotKey的对像,HotKey_OnHotKey 是 this的方法 我知道是逐个替换,可是替换过了,还是不知道什么意思。请大侠指教。谢谢
      

  7.   

    *(void**)&(&HotKey)->_pfnOnHotKey._pFunc=(void*)(HotKey_OnHotKey);                //这个;是宏里面的*(void**)&(&HotKey)->_pfnOnHotKey._pThis=(void*)(this);                //这个;不是宏里面的////////////////
    基本上就是给this的HotKey这个变量设置了一个参数HotKey_OnHotKey。谢谢 jennyvenus 大侠iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey); 经过你的解释,从这里我看代码,猜的意思应该是
    将 HotKey对像的 OnHotKey 方法的地址指定为 this.HotKey_OnHotKey方法
    并把HotKey对像的 OnHotKey方法中的this(应该是HotKey)替换成 this(包含HotKey的对像)