Re[5]: Приведение типа указателя
От: dotidot Россия  
Дата: 05.03.08 11:42
Оценка:
Здравствуйте, 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();
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.