|
发表于 2012-3-31 16:09:00
|
显示全部楼层
Re:有关OGRE中单件代码的问题
结合用法来看, 用的时候是从这个单件类派生的:
class MyClass : public Singleton<MyClass> ...
在这里 MyClass 是派生类, Singleton<MyClass> 是基类. 为了方便, 我们用 Derive和 Base 来代替它们, 于是可以得到:
int offset = (int)(Derive*)1 - (int)(Base*)(Derive*)1;
ms_Singleton = (Derive*)((int)this + offset);
其中, 第一句是在计算派生类和基类之间的偏移(在单继承中这通常是 0, 在多继承当中,它和继承的顺序有关, 具体参见 <<深度探索C++对象模型>> 一书).
第二个把基类的指针加上 派生类和基类之间的偏移 后, 就把基类的 this 指针转换成为了派生类的指针了.
所以, 这两句只是在做一个指针的转型, 即 #else 后面那一句 ms_Singleton = static_cast< T* >( this ); 的功能. |
|