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)

  • 相关阅读:
    Swift协议+代理
    socket编程详解
    Sublime Text 3下 Emmet 使用小技巧
    sublime text3 针对于前端开发必备的插件
    Emmet使用手册
    使用Emmet(前身Zen Coding)加速Web前端开发
    Emmet的高级功能与使用技巧
    RSS订阅推荐
    UIView中常见的方法总结
    技术博客rss订阅源收集
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5132341.html
Copyright © 2011-2022 走看看