zoukankan      html  css  js  c++  java
  • 单例模式模板

    在平常的开发工作中,单例是我们经常使用的模式,经常我们需要写无数个单例类,现在提供一种单例模板:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #pragma once
     
    // common include
    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>  
    // windows include 
    #if defined _WIN32
    #else
    // linux include
    #include <errno.h>
    #endif
         
    template <typename T>
    class Singleton
    {
    protected:
        static T* singleton_;
    public:
        Singleton(void)
        {
            assert(!singleton_);
    #if defined(_MSC_VER) && _MSC_VER < 1200 
            int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
            singleton_ = (T*)((int)this + offset);
    #else
            singleton_ = static_cast< T* >(this);
    #endif
        }
         
         
        ~Singleton(void){  assert(singleton_);  singleton_ = 0; }
        static T& getSingleton(void) { assert(singleton_);  return (*singleton_); }
        static T* getSingletonPtr(void){ return singleton_; }
    };
     
    #define _SINGLETON_INIT( TYPE )                
    template <>    TYPE * Singleton< TYPE >::singleton_ = 0;   

    用法: 
    class A:public Singleton<A> 

    }; 
    在cpp文件中:

    template<> A* Singleton<A>::singleton_ = 0;

    _SINGLETON_INIT(A)

  • 相关阅读:
    关于相对定位与绝对定位
    一些常用但不平凡的CSS属性
    Java-认识变量、注释并能及时发现错误
    了解Java并学会创建Java项目(一个菜鸟的成长历程)
    竞态条件
    web服务器原理
    信号
    静态网页与动态网页区别
    mmap
    HTTP协议
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5132341.html
Copyright © 2011-2022 走看看