У меня есть программа, которая использует внешний API, который использует свое собственное состояние. Программа сохраняет начальное состояние в начале. После этого десятки функций вызываются с помощью диспетчера в зависимости от ввода. Каждый из них изменяет текущее состояние с помощью API. Одна из функций должна иметь возможность сбрасывать текущее состояние до исходного. Хотя для этого потребуется доступ к переменной / константе, установленной в начале, которая выходит за рамки функции.
Одним из решений будет глобальное, которое считается злом. Другим решением может быть функция со статической переменной для хранения начального состояния при первом вызове. Повторный вызов вернет статическое состояние. Хотя на самом деле это не улучшение.
Есть ли какое-нибудь чистое, поддерживаемое решение этой проблемы?
Редактировать: Хорошо, допустим, я все-таки буду использовать const global. Чтобы проиллюстрировать это, я буду использовать следующий код:
extern int get_state();
extern void set_state(int);
const int initial_state = get_state();
int main()
{
while(1) {
// call dispatcher, eventually
break;
}
set_state(initial_state);
return 0;
}
Проблема в том, что инициализатор initial_state
должен быть постоянным, что get_state()
, очевидно, не является. Есть ли способ обойти это?