Расширение пула методов конкретного класса, производного от интерфейса - PullRequest
0 голосов
/ 18 июня 2010

Я создал интерфейс для абстрагирования части исходного кода для последующего расширения.Но что, если я хочу расширить производные классы некоторыми специальными методами?Итак, у меня есть интерфейс:

class virtualFoo
{
public:
 virtual ~virtualFoo() { }

 virtual void create() = 0;
 virtual void initialize() = 0;
};

и один производный класс с дополнительным методом:

class concreteFoo : public virtualFoo
{
public:
 concreteFoo() { }
 ~concreteFoo() { }

 virtual void create() { }
 virtual void initialize() { }

 void ownMethod() { }
};

Поэтому я пытаюсь создать экземпляр concreteFoo и вызвать ownMethodвот так:

void main()
{
 virtualFoo* ptr = new concreteFoo();
 concreteFoo* ptr2 = dynamic_cast<concreteFoo*>(ptr);

 if(NULL != ptr2)
  ptr2->ownMethod();
}

Это работает, но не совсем элегантно.Если я попытаюсь использовать ptr->ownMethod(); напрямую, компилятор пожалуется, что этот метод не является частью virtualFoo.Есть ли шанс сделать это без использования dynamic_cast?

Заранее спасибо!

1 Ответ

1 голос
/ 18 июня 2010

Это именно то, для чего dynamic_cast. Тем не менее, вы обычно можете избежать его использования, изменив свой дизайн. Поскольку вы привели абстрактный пример, трудно судить о том, следует ли вам поступать иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...