今天在MFC的文件中看到这样的一段代码:
template<>
class CVarTypeInfo< CY >
{
public:
static const VARTYPE VT = VT_CY;
static CY VARIANT::* const pmField;
};__declspec( selectany ) CY VARIANT::* const CVarTypeInfo< CY >::pmField = &VARIANT::cyVal;请问CY VARIANT::* 怎么解释?? 是表示VARIANT里的CY类型呢 还是 表示首先是VARIANT型的指针再是CY类型的????? 如果是VARIANT里的CY类型那为什么不写成VARIANT::CY *?????  请高手指点。

解决方案 »

  1.   

    为什么没人回答呀,高手们 Power On!!!!
      

  2.   

    搂主忒急了,高手也要睡觉的啊。
    哈哈,开个玩笑。这是指向成员的指针。
    比如struct A
    {
      ...
      int IntMem;
      ...
    };那么“指向A的整数成员的指针”就可以写成
    int A::* pIntMem;
    赋值的话可以:
    pIntMem = &A::IntMem;  // pIntMem是对应类的
    假如你定义了A的变量a和A的指针p,那么:
    a.*pIntMem;
    p->*pIntMem;
    就可以取得变量值。和直接写int *不同的是,你可以用不同的A的变量来取值,而int *必须在有了A的变量后才能用:
    int * pInt;
    A a;
    pInt = &a.IntMem; // pInt是对应类的某个实例的这种写法还可以用在class中,用法相同。
    最有用的可以用在类的成员函数上(虚函数或非虚函数都可以)。比如:
    class B
    {
    public:
      int Func(int);    // 虚函数也可以。
    };int (B::* pMemFunc)(int);
    pMemFunc = B::Func;B * pB = new B;
    int r = pB->* pMemFunc(10);
      

  3.   

    看看msdn的.*和->*操作符 及里面的例子就明白了