dimka, твой вариант хороший, но есть одно НО, точнее 2.
Если у меня несколько классов, которые должны быть синглтонами, значит для каждого писать свой синглтон.
У меня реализация синглтона такая:
template <class T> class Singleton {
private:
static T* self;
static int refCount;
protected:
Singleton() {}
virtual ~Singleton()
{
self = NULL;
}
public:
static T* GetInstance()
{
if (!self)
self = new T;
refCount++;
return self;
}
void FreeInst()
{
if(--refCount == 0)
delete this;
}
};
dimka, еще ты специально выделил IProtocol (т.е. в этом есть какой-то особый смысл, кроме того, что это интерфейс), т.е. я это спрашиваю к тому, что я пробовал так:
IProtocol нету, а все его методы в CProtocol.
Теперь я CProtocol делаю template, т.е.
template <class T> class CProtocol : public Singleton<T> {...}
class CConcreteProtocol : public CProtocol<CConcreteProtocol> {...}
И мне выдовало ошибку повторное описание CConcreteProtocol.
Правда, у меня есть подозрение что дело было в другом, потом попробую и скажу.
LogRus, я это понял. Я может быть не правильно выразился. Одна из проблем, которые стоят передо мной. Это то, что класс, который должен будет работать с объектами (тем же CProtocol) знает только их интерфейсы и больше ничего, т.е. он не знает конктретных классов. Назовем его CCore.
Один из вариантов решения - это виртуальный метод, умеющий создавать экземпляры этих классов, т.е. что-то вроде Clone - если я правильно понимаю это паттерн Prototype.
Ладно с этим я еще подумаю...
А так LogRus, dimka, sss и все остальные большое спасибо, что откликаетесь на мои вопросы, а то я уже давно "варюсь в собственном соку"
.