1

私には4つのクラスがあります。S1、S2、S3、S4と呼びましょう。これらのクラスはシングルトンです。それぞれにgetInstanceとfinalizeメソッド(およびインスタンスのプライベート変数)があります。

ここで、finalizeメソッドとgetInstanceメソッドの繰り返しを避けるために、次のようなSingletonMixinクラスを作成しようとしています。

template<class T> class SingletonMixin
{
    public:
        static T* getInstance();
    private:
        static T* instance;

};

ここでの問題は、シングルトンクラスをインスタンス化し、コンストラクターをプライベートに保つにはどうすればよいかということです。


編集

(説明)

つまり、どうすればそれを行うことができますか?

template<class T> T* SingletonMixin<T>::instance = 0;
template<class T> T* SingletonMixin<T>::getInstance()
{
    if (instance == 0)
    {
        instance = T();
    }
    return instance;
};

しかし、プライベートTコンストラクトT()


ありがとう!

4

3 に答える 3

1

問題:(デ)コンストラクターをプライベートにすると、シングルトン基本クラスはインスタンスを生成できません。

でも:

friend class SingletonMixin<Foo>;

あなたの友だちです。

于 2010-08-15T15:12:31.763 に答える
0

以下は動作しませんか?

class Foo : public SingletonMixin<Foo>
{
};
于 2010-08-15T15:06:24.723 に答える
0

シングルトンと継承は非常にひどく混ざり合っています。これは、シングルトンに関する基本的なステートメントが「このクラスのインスタンスは1つしか存在できない」であるのに対し、子クラスの存在は、少なくとも異なるインスタンスの可能性があることを意味するためです。これらの4つのクラスをシングルトンではないようにするには、ほぼ確実にこれをリファクタリングする必要があります。

于 2010-08-17T20:34:51.627 に答える