создание класса SingletonMixin в C ++ - PullRequest
1 голос
/ 15 августа 2010

У меня есть четыре класса, давайте назовем S1, S2, S3 и S4. Эти классы являются синглетонами; каждый из них имеет метод getInstance и метод finalize, а также частную переменную экземпляра.

Теперь, чтобы избежать повторения методов finalize и getInstance, я пытаюсь создать класс SingletonMixin, что-то вроде:

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

};

Проблема здесь в следующем: как экземпляры синглтона могут храниться и сохранять их конструктор закрытым?


Редактировать

(осветления) * +1011 *

Я имею в виду, как я могу это сделать:

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

но с частной конструкцией T T ()


Спасибо!

Ответы [ 3 ]

1 голос
/ 15 августа 2010

Проблема: если вы делаете (де) конструкторы частными, базовый класс Singleton не может сгенерировать экземпляр.

Однако:

friend class SingletonMixin<Foo>;

ваш друг.

0 голосов
/ 18 августа 2010

Синглтоны и наследование смешиваются очень плохо. Это потому, что фундаментальное утверждение о Синглтоне таково: «может быть только один экземпляр этого класса», в то время как существование дочерних классов подразумевает, что существует, по крайней мере, возможность различных экземпляров. Вы почти наверняка должны изменить этот код, чтобы эти четыре класса не были синглетонами.

0 голосов
/ 15 августа 2010

Не работает ли следующее?

class Foo : public SingletonMixin<Foo>
{
};
...