在C++中创建一个SingletonMixin类
我有四个类,让我们调用S1,S2,S3和S4。这些课是单身人士;每个人都有一个getInstance和一个finalize方法 - 以及一个实例私有变量。在C++中创建一个SingletonMixin类
现在,为了避免repeting的最终化和getInstance方法我试图做一个SingletonMixin类,类似:
template<class T> class SingletonMixin
{
public:
static T* getInstance();
private:
static T* instance;
};
这里的问题是:如何能够例如单身clasess并保持其构造私有?
编辑
(澄清)
我的意思是,我怎么能做到这一点:
template<class T> T* SingletonMixin<T>::instance = 0;
template<class T> T* SingletonMixin<T>::getInstance()
{
if (instance == 0)
{
instance = T();
}
return instance;
};
但私人牛逼结构T()
谢谢!
问题:如果您使(de)构造函数为私有,则Singleton基类无法生成实例。
但是:
friend class SingletonMixin<Foo>;
是你的朋友。
没有解构器,只有析构器。 – 2010-08-15 16:03:18
以下不行吗?
class Foo : public SingletonMixin<Foo>
{
};
它不起作用,如果它们是受保护的/私有的,基类不能调用派生类的构造函数/析构函数。你已经声明基类是一个“朋友”,可以做到这一点。 – Praetorian 2010-08-15 17:15:52
单身和遗传混合在一起非常糟糕。这是因为关于单例的基本陈述是:“只能有一个这个类的实例”,而子类的存在意味着至少存在不同实例的可能性。你几乎可以肯定地重构这个,让这四个类不是单例。
简单的答案是:不要。尽可能避免单身人士是可怕的设计模式。 – Puppy 2010-08-15 15:07:42
四个单身课程?大多数人无法想到* one *适当使用单身人士。 – jalf 2010-08-15 20:22:33
@jalf:只是一个练习,我正在学习这门语言。 – Hugo 2010-08-16 23:52:26