首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > Ogre的Singleton实现以及改进
【标  题】:Ogre的Singleton实现以及改进
【关键字】:Ogre,Singleton
【来  源】:http://www.cppblog.com/sandy/archive/2005/11/30/1436.html

Ogre的Singleton实现以及改进

www.ogre3d.org
OGRE: A 3D library for OpenGL and/or Direct3D

 

template <typename T> class Singleton
{
protected:
static T* ms_Singleton;

public:
Singleton( 
void )
{
    assert( 
!ms_Singleton );
    ms_Singleton 
= static_cast< T* >this );
}
~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 );  }
};

//client端的代码
//Singleton的类
//Root.h
class Root:public Singleton<Root>
{
   
public:
      
void Use();
};

//初始化
//Root.cpp
Root * Singleton<Root>::ms_Singleton =0;
Root g_root;
//must declare once only

//使用
//Test.Cpp
Root::getSingleton().Use();

很简单,使用的技巧是template base class
这种实现方法的好处是复用性好。
不过使用者要声明Root * Singleton<Root>::ms_Singleton =0;挺讨厌的

改进方法:template static member function
也就是改变声明一个static T*在template class,换成使用静态成员函数取出instance

template <typename T> class Singleton
{
private:
static T* & ms_Singleton()
        {
                
static T* ms_Singleton_ =0 ;
                
return ms_Singleton_;
        }
        
public:
Singleton( 
void )
{
    assert( 
!ms_Singleton() );
    ms_Singleton() 
= static_cast< T* >this );
}
~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() );  }
};



 

VC6==>VS2005的一些问题:【上一篇】
ACE Beginner:【下一篇】
【相关文章】
  • OGRE分析之文件系统(一)
  • VB.NET实现Singleton模式
  • 见一好东西:Threaded WebDownload class with Progress Call-backs
  • 垂直显示ProgressBar
  • PROGRESS编程其实很简单(序)
  • PROGRESS编程其实很简单(一)
  • PROGRESS数据库性能调整攻略
  • PROGRESS编程其实很简单(二)
  • PROGRESS编程其实很简单(二)·续
  • PROGRESS数据库的创建
  • 【随机文章】
  • 备份,编辑文件
  • 嘱咐自己走出阴影
  • MMS——短消息业务的进一步延伸
  • 测了一下引擎速度
  • 关于硬盘主引导扇区的备份与恢复的方法小结
  • Exploring /proc
  • C#设计模式系列1-简单工厂模式
  • C++主题年技巧积累#1——UltraEdit的代码美化
  • DirectShow 学习笔记第二部分
  • php 安装
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.