2016-05-11 2 views
0

У меня есть некоторый класс для коллектора, и 2-мя способами, например:C++ добавить флаг константный метод

bool MyCollectorChanged() const; 
bool MyCollectorDoSomeOperation() const; 

Я не могу изменить подписи этих методов, означает, что я не могу удалите из подписи const.

Я хочу установить/отключить некоторый флаг в MyCollectorChanged() для некоторой ситуации, поэтому я мог проверить значение флага внутри MyCollectorDoSomeOperation().

Добавление флага участника в класс не будет работать, так как MyCollectorChanged() является методом const, поэтому я не могу изменить флаг элемента внутри MyCollectorChanged().

Есть ли возможность сделать это? Как установить/отключить некоторый флаг внутри MyCollectorChanged(), так что он будет виден внутри MyCollectorDoSomeOperation()?

+0

Перегрузка метода без 'const'? – CinCout

+0

См. Http://stackoverflow.com/questions/105014/does-the-mutable-keyword-have-any-purpose-other-than-allowing-the-variable-to – 4386427

+0

Возможный дубликат [Изменение состояния объекта в методе const ] (http://stackoverflow.com/questions/33596437/changing-object-state-in-const-method) –

ответ

4

Вариант 1

Если у вас есть возможность изменять атрибуты переменных членов private, вы можете сделать некоторые из них mutable. Затем вы сможете изменить их значения в функции-члене const.

См. http://en.cppreference.com/w/cpp/language/cv для получения дополнительной информации.

Вариант 2

Если у вас есть возможность использовать Pimpl idiom, вы сможете изменить значение любой переменной члена в class/struct, который представляет данные основного class.

+0

Как насчет перегрузки метода путем удаления 'const'? Это будет работать? – CinCout

+0

@CinCout, я думаю, что OP хочет обновить данные в функциях 'const'. –

+0

Согласовано. Но перегружает ли возможное решение для достижения того же? Чтобы установить/сбросить флаг в не-const-методе и вызвать 'const' один из неконстантного, чтобы избежать дублирования кода? – CinCout

Смежные вопросы