生成单件类

来源:互联网 发布:澳洲硕士 知乎 编辑:程序博客网 时间:2024/06/06 05:53

// dff.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

//整数做为型别
template<int v>
struct Int2Type
{
    enum {value = v};
};
//根据要产生单件类的类名和传入的数字共同确定单件类
template<class S, class T = Int2Type<0> >
class SingleClass
{
public:
    static S* Init()
    {
        static S s;

        return &s;
    }
};

#define WX_M1            1
#define WX_M2            2

class WX
{
public:
    int m_n;
};

class A : public SingleClass<WX, Int2Type<WX_M1> >
{
};
class B : public SingleClass<WX> //相当于 <WX, Int2Type<0> >
{
};

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "default A B" << endl;
    cout << A::Init()->m_n << endl;
    cout << B::Init()->m_n << endl;

   
    cout << "A = 10 default B" << endl;
    A::Init()->m_n = 10;
    cout << A::Init()->m_n << endl;
    cout << B::Init()->m_n << endl;

   
    cout << "A = 10   B = 300" << endl;
    B::Init()->m_n = 300;
    cout << A::Init()->m_n << endl;
    cout << B::Init()->m_n << endl;

    return 0;
}