typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);这个类型别名的定义该如何解释,我的理解:
首先,这是定义了一个函数指针,返回类型是void,参数void
其次,CCmdTarget:: 指明这个函数指针定义的作用域是在CCmdTarget类内,即只在该类内部有效.不理解的是:AFX_MSG_CALL是什么意思?调用约定么?但查了一下调用约定里没有这个符号的说明,而AFX_MSG_CALL在头文件中只是一个简单的宏定义(没有值).帮忙解释一下AFX_MSG_CALL,另外我其他的理解是否有误?谢谢.

解决方案 »

  1.   

    #ifndef AFX_MSG_CALL
    #define AFX_MSG_CALL
    #endif
    typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);
      

  2.   

    另外:查了一下用typedef定义函数指针时,前面加上类型限定的含义:typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);AFX_PMSG pfunc; //用AFX_PMSG定义变量pfunc,则:
    1.pfunc只能用类CCmdTarget中的函数名来赋值
    2.使用pfunc的时候:
    如果实在类的外部则必须用对象名进行指定,就好比使用类方法一样:
    obj.(*pfunc)();
    pObj->(*pfunc)();
    如果在类内部:
    (*pfunc)();
    this->(*pfun)();理解是否正确?
      

  3.   

    typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);加上CCmdTarget::限定,则:(有无此限定导致了函数的调用约定不同,全局函数和类方法的约定是不同的)
    1.定义的函数指针变量只能用该类的类方法赋值
    2.只能在类内部使用
    3.唯一的使用形式(this->*pfunc)();同时,类名限定不会影响该类型的作用域,即:
    1.类外部定义,为全局作用域(类外部或者内部,可直接定义变量,好比一般的自定义全局类型如struct)
    2.类内部定义,作用域为类内部(外部仍可通过作用域解析符使用)