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)

  • 相关阅读:
    小伙子的毕业设计
    mongoDB
    Java面试题笔试题收集
    react-router4 介绍
    React 组件间通信 总结
    react ajax
    react应用(基于react脚手架)
    React 之 组件生命周期
    组件收集表单数据
    组件的组合使用
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5132341.html
Copyright © 2011-2022 走看看