Спасибо всем кто ответил. Я почитал ответы и понял, что задача сформулирована не совсем полно. Более полная формулировка такая:
Есть код:
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.
Хотя с другой стороны если хранить ещё один указатель или индекс или итератор, то вроде как возникает дублирование одной и той же информации.