Здравствуйте, Eldar9x, Вы писали:
лучше озвучте суть проблемы, а то какие то технические детали вами придуманного способа её обхода обсуждаем.
Судя по описанию, можно предложить расширить интерфейс А(добавить doB), либо использовать костыли вроде State паттерна.
E>понятно. А возможно ли изменить тип указателя на тип B*, после операции:
E>E>A * a = new C();
E>
Тип переменной в с++ менять нельзя никак. Можно далее в коде написать что-то вроде:
a = new B();
Если вам нужно полиморфное поведение, меняйте сам объект. Ну или изобретайте какой нить велосипед/городите враппер, что хуже решать вам.
вот пример недо State декоратора:
struct A
{
virtual void f()=0;
virtual ~A(){}
};
struct B:A
{
virtual void f(){}
};
struct C:B
{
virtual void f(){}
};
struct StateFull:A
{
C* c;
bool callOnlyB;
StateFull(C* c_):
c(c_),
callOnlyB(false)
{}
void setCallBOnly(bool b)
{
callOnlyB = b;
}
virtual void f()
{
if(callOnlyB)
c->B::f();
else
c->f();
}
}