Re: Синглтон, позволяющий создавать полиморфные объекты
От: Кодт Россия  
Дата: 30.01.04 17:45
Оценка:
Здравствуйте, Alxndr, Вы писали:

<>

Давай сперва без шаблонов обойдёмся. Маломало помечтаем...

Вариант №1
class abstract
{
public:
  static abstract* instance();
  .....
};

class concrete : public abstract
{
  .....
};

test() { assert( dynamic_cast<concrete*>(abstract::instance()) != NULL ); }

Сразу возникает вопрос: а что, если есть несколько классов, concrete1...concreteN ? Что вернет abstract::instance() ?

Вариант №2
class abstract
{
  .....
};

class concrete : public abstract
{
public:
  static abstract* instance();
};

Здесь оказывается непринципиальным, унаследован ли concrete от abstract — на синглетонность это не влияет.

Что тебе больше нравится?


В первом случае мы имеем дело, по большому счёту, с фабричным методом (как минимум).
Финальный класс должен быть либо известен абстрактному заранее,
либо должен регистрировать себя (да ещё проверить — не нашлись ли иные претенденты)
— на стадии линковки (а не компиляции), а то и вообще в рантайме.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.