К сожаленью, вам придется изменить целую кучу кода, чтобы исправить это.
class Counter {
int counter;
public:
Counter(int counter = 0) : counter(counter) {}
void func() { ++counter; /* some code */ }
}
int main()
{
Counter c;
/* some code */
c = Counter(2);
/* some code */
return 0;
}
Везде, где просто вызывался func
, теперь нужна ссылка на Counter
.
Я собираюсь предположить, что одна из причин, по которой вам "нужно модифицировать" счетчик, заключается в том, что вы хотите вернуться в некоторое предыдущее состояние после того, как вызвали func
несколько раз. К счастью, вы можете легко добиться этого с помощью класса Counter
, скопировав его и оперируя копией.
Т.е. вместо
void doStuffAndRevert() {
int existing = func() - 1; // include the initial ++
func();
func() = existing; // reset to start
}
вы можете, используя pass-by-value, убедиться, что у вас есть локальная копия:
void doStuffAndRevert(Counter c) {
c.func();
c.func();
c.func();
}
Прикрепляю к посту несколько видео по теме: