Я создал интерфейс для абстрагирования части исходного кода для последующего расширения.Но что, если я хочу расширить производные классы некоторыми специальными методами?Итак, у меня есть интерфейс:
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
?
Заранее спасибо!