#define DECLARE_PTHIS(type, offset) type *pThis = (type*)((char*)this) - (long)&(((type*)0)->offset); 有什么作用 

解决方案 »

  1.   

    (type*)((char*)this): 对象的起始地址;
    (long)&(((type*)0)->offset:对象成员“offset”相对起始地址的偏移;二者相减是什么呢?难道是得到包容对象的起始地址?
    嗯,有可能,尤其是在嵌套COM中会这样做。
      

  2.   

    这种宏常用于链表中,例如:
    class NODE {
        NODE* Last;
        NODE* Next;
    };
    class TESTDATA {
        // some data;
        NODE Node;
    };
    程序中使用TESTDATA类建立链表,各节点之间通过Node成员来联系,即Node.Next表示下一节点中Node成员的地址,在NODE类的某个成员函数中如果要得到TESTDATA结构指针时,就可以使用这个宏来取得。
    另外提一下,这种做法可读性较差,而且不方便使用,应使用派生类的方式替代,只是某些早期遗留下来的结构中仍采用这种方式。
      

  3.   

     DECLARE_PTHIS嵌套类中获得主类的的this指针