Что вы можете сделать, это использовать std :: pair для каждой переменной. Инициализируется с помощью variable.first = variable.second = value
. После каждого раза, когда вы хотите обновить установленную переменную: variable.second = new_value
. Если вы хотите восстановить оригинал, вы устанавливаете: variable.second = variable.first
. Вы можете улучшить его, написав макрос RestoreDefault(var)
, чтобы сделать код более читабельным.
Например:
#define RestoreDefault(var) ((var).second = (var).first)
// int val1{180}; // Instead of this line
std::pair<int,int> val1{ 180,180}; // <- this line
val1.second = 456;
RestoreDefault(val1);
Если вы хотите в жестком коде заблокировать любую возможность позже установить значение по умолчанию, напишите:
std::pair<const int,int> val1{ 180,180}; // <- this line
-
Добавление: тот же принцип для массива:
class Foo
{
public:
int x = 100;
int y = 200;
};
#define RestoreArrDefault(var) ((var).second.fill((var).first))
// Use:
std::pair<Foo, std::array<Foo, 100>> FooAr, FooAr2;
// You can define different arrays with different defaults:
FooAr.first = { 180,360 }; // <- Customize FooAr defaults
// In that point FooAr default is 180,360 and FooAr2 default is 100,200
FooAr.second[3] = { 2,10 }; // <- Edit FooAr index-3 item
RestoreArrDefault(FooAr); // <- Restore Default