游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1183|回复: 0

OGRE源码中单件的问题求助,谢谢

[复制链接]

54

主题

116

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2008-8-14 14:59:00 | 显示全部楼层 |阅读模式
OGRE的源代码中有下面的单件代码。有两句看不懂 。

            int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
            ms_Singleton = (T*)((int)this + offset);
貌似是计算内存地址的,小弟基础有点差。请问这两句具体是如何计算的呢?谢谢了

template <typename T> class Singleton
    {
    protected:

        static T* ms_Singleton;

    public:
        Singleton( void )
        {
            assert( !ms_Singleton );
#if defined( _MSC_VER ) && _MSC_VER < 1200  
            int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
            ms_Singleton = (T*)((int)this + offset);
#else
    ms_Singleton = static_cast< T* >( this );
#endif
        }
        ~Singleton( void )
            {  assert( ms_Singleton );  ms_Singleton = 0;  }
        static T& getSingleton( void )
{ assert( ms_Singleton );  return ( *ms_Singleton ); }
        static T* getSingletonPtr( void )
{ return ms_Singleton; }
    };

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 16:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表