Я ищу решение проблемы дизайна класса C++. То, что я пытаюсь достичь, - это статический метод метода в базовом классе, который будет возвращать экземпляры объектов типов потомков. Дело в том, что некоторые из них должны быть одиночными. Я пишу его в VCL, поэтому есть возможность использовать __properties
, но я бы предпочел использовать чистые решения на C++.Как объявить заводской метод в базовом классе?
class Base {
private:
static Base *Instance;
public:
static Base *New(void);
virtual bool isSingleton(void) = 0;
}
Base::Instance = NULL;
class First : public Base { // singleton descendant
public:
bool isSingleton(void) { return true; }
}
class Second : public Base { // normal descendant
public:
bool isSingleton(void) { return false; }
}
Base *Base::New(void) {
if (isSingleton())
if (Instance != NULL)
return Instance = new /* descendant constructor */;
else
return Instance;
else
return new /* descendant constructor */;
}
Возникающие проблемы:
- как объявить статическую переменную
Instance
, поэтому было бы быть статическими в классах-потомках - как называть потомков конструкторами в базовом классе
Я считаю, было бы невозможно преодолеть эти проблемы так, как я это планировал. Если это так, я бы посоветовал, как его решить любым другим способом.
Edit: некоторые незначительные изменения в коде. Я пропустил несколько указателей.
Вы имеете в виду 'Instance == NULL'? – rriemann