Re: Как обойтись без const_cast?
От: Андрей Е  
Дата: 17.05.12 07:48
Оценка:
Спасибо всем кто ответил. Я почитал ответы и понял, что задача сформулирована не совсем полно. Более полная формулировка такая:
Есть код:
class A {
public:
    void process() {}
};

class B {
public:
    B(const A* a)
        : m_a(a)
    {}
    
    const A* getA() const {return m_a;}
private:
    const A* m_a;
};


class C {
public:
    void process() {
        m_b.getA()->process(); // Ошибка! m_b.getA() возвращает const A*, а нужно A*
    }
private:    
    std::vector<A> m_aa;
    B m_b;
};


Есть ТРИ класса. Класс C владеет списком экземпляров класса A и экземпляром класса B, причём экземпляр класса B ссылается на один из экземпляров класса A из списка.
Так как класс C является владельцем, то он имеет право как угодно изменять свои экземпляры классов A и B.
Класс B должен иметь возможность доступаться до константых методов своего объекта класса A, так как ему нужна информация о его состоянии.
Класс C в функции process хочет вызвать неконстантную функцию process именно того объекта класса A на который ссылается его объект класса B.

Возможно в этом случае решение найти проще.
Глядя на эту схему возникает мысль, что возможно проблема состоит в том, что мы пытаемся использовать указатель B::m_a для двух разных целей: для получения информации об A изнутри B и для связи объекта B и A в классе C.
Хотя с другой стороны если хранить ещё один указатель или индекс или итератор, то вроде как возникает дублирование одной и той же информации.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.