Однако, модификатор свойства класса mutable существует именно для того, чтобы иметь возможность менять его из константных методов.
Впрочем, не остаётся решённым вопрос с неконстантными методами. очень сильно надо.
Для этого есть другой хитрый финт ушами. Никто не запрещает вызвать метод у указателя. Однако, этот указатель не должен быть константным.
class Foo {
public:
Foo():i(0){
}
void foo() const {
Foo *foo = (Foo*) this;
// Обновлено: более наглядно будет:
// Foo *foo = const_cast<Foo*>(this);
foo->bar();
}
void bar() {
i++;
}
int i;
};
Самый финт в данном случае - это приведение константной ссылки this к неконстатной ссылке foo после чего и становится возможным вызов неконстантного метода.
Комментариев нет:
Отправить комментарий