简单宏实现将C++类变为singleton模式

原创
2013/01/19 14:25
阅读数 176
#define SINGLETON(T, ...) \                       
    static T& GetInstance() \                     
    {\                                            
        static T instance(__VA_ARGS__); \         
        return instance; \                        

    }                       

                      

#define SINGLETON_NOARG(T) \                      
    static T& GetInstance() \                     
    {\                                            
        static T instance; \                      
        return instance; \                        

    }

这两个宏需要在public域下使用

目前还没有实现将两个宏合并为一个宏,如果有朋友知道 烦请告知~

另外如果需要自动实现无法赋值拷贝,可以使用boost::noncopyable

具体如下

#include <boost/noncopyable.hpp>

class Singleton : boost::noncopyable
{
    protected:
        Singleton()
        {   
        }   
};

你的类只需要继承这个Singleton类即刻,当然,还得用上之前的两个宏中的一个来定义函数~


update:

可以用

#define SINGLETON(T, ...) \
    static T& GetInstance() \
    {\
        static T* p = new T(__VA_ARGS__); \
        return *p; \
    }\

来替换之前的两个宏,这样只需要一个宏即可


update 2:

据说良好的设计是在main函数之前都是单线程的, 那么 需要线程安全的话,就在使用下面两个

#define SINGLETON_DECLEAR(T) \
    static T* pInstance; \
    static T& GetInstance() \
    {\
        return *pInstance; \
    }


#define SINGLETON_IMPLEMENT(T, ...) \
    T* T::pInstance = new T(__VA_ARGS__);

这样当还没进入主函数的时候都已经初始化好了,而且实现CPP和H分离。


哈 很无聊的感觉~


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部