Обход константности метода C ++ в производном классе - PullRequest
3 голосов
/ 10 февраля 2011

Я должен использовать каркас, который определяет важный метод ловушки как const, как этот

class FrameworkClass {
  ...
  virtual void OnEventA(unsigned value) const;
  ...
}

В моем производном классе мне нужно сохранить значение, которое я получаю через ловушку

class MyClass: public FrameworkClass
{
  ...
  virtual void OnEventA(unsigned value) const { savedValue = value; } // error!

private:
  unsigned savedValue;
}

К сожалению, я не могу изменить рамки.

Есть ли хороший способ обойти постоянство метода ловушек?

Ответы [ 2 ]

6 голосов
/ 10 февраля 2011

Сделать переменную изменяемой:
mutable unsigned savedValue;

5 голосов
/ 10 февраля 2011

mutable - слишком «широкий» обходной путь, потому что влияет на методы, которые правильно используют const'ness. для обхода неуместного const'ness есть const_cast:

class MyClass: public FrameworkClass
{
  ...
  virtual void OnEventA(unsigned value) const { const_cast<MyClass*>(this)->savedValue = value; } // error!

private:
  unsigned savedValue;
}
...