博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++单例模板
阅读量:7134 次
发布时间:2019-06-28

本文共 1005 字,大约阅读时间需要 3 分钟。

hot3.png

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

#pragma once// common include#include 
#include
#include
// windows include #if defined _WIN32#else// linux include#include
#endif template
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*)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)

转载于:https://my.oschina.net/u/659405/blog/388411

你可能感兴趣的文章
web.xml元素介绍
查看>>
Shell升级,/bin/bash版本号4.1到4.3
查看>>
linux乱码
查看>>
由浅入深表达式树(完结篇)重磅打造 Linq To 博客园
查看>>
使程序在Linux下后台运行
查看>>
【转】json格式化、高亮库jsonFormater
查看>>
CentOS 7 NetworkManager Keeps Overwriting /etc/resolv.conf
查看>>
smartfoxserver扩展里面过滤聊天的不合法字符
查看>>
cmake简明使用指南
查看>>
计算机操作系统
查看>>
MariaDB mysql 比较区别 选择
查看>>
【EF】Entity Framework Core 命名约定
查看>>
Java中net.sf.json包关于JSON与对象互转的坑
查看>>
Linux配置快捷方式路径
查看>>
[LeetCode] My Calendar III 我的日历之三
查看>>
wp rest api 授权方法步骤(使用JWT Authentication插件)
查看>>
优化查询的方式
查看>>
Eclipse 2017最佳20个插件
查看>>
6.控制器(ng-Controller)
查看>>
Android项目实战(四十八):架构之组件化开发
查看>>