Хочется странного. Есть переменная. Нужно заменить ее чем-то, что позволит автоматом проверять значение этой переменной после любой ее модификации.
Накостылил вот такой велосипед. Нужно, чтобы после оператора += выполнился метод check.
Работает, но нужно обойтись без явного каста (в main()) без добавления в обертку всего зоопарка операторов.
Как заставить компилятор выполнить 2 приведения? Понимаю, что стандарт запрещает, но может быть есть какая-то хитрость?
Re: 2 неявных приведения типа в одном вызове. Как?
Здравствуйте, MTimur, Вы писали:
MT>Хочется странного. Есть переменная. Нужно заменить ее чем-то, что позволит автоматом проверять значение этой переменной после любой ее модификации. MT>Накостылил вот такой велосипед. Нужно, чтобы после оператора += выполнился метод check. MT>Работает, но нужно обойтись без явного каста (в main()) без добавления в обертку всего зоопарка операторов. MT>Как заставить компилятор выполнить 2 приведения? Понимаю, что стандарт запрещает, но может быть есть какая-то хитрость?
Я бы так сделал (правда синтаксис вызовов изменится):
Здравствуйте, Chorkov, Вы писали:
C>Здравствуйте, MTimur, Вы писали:
C>Я бы так сделал (правда синтаксис вызовов изменится):
В том-то и дело, что синтаксически работа с переменной не должна измениться. Есть, грубо говоря, 200 проектов среднего размера. Эти проекты насквозь пронизаны простой сущностью (int), которую внезапно понадобилось отслеживать на всем пути вычислений. Если изменить синтаксис, то только чтобы заставить "это" компилироваться понадобится неделя. На самом деле есть еще пара сущностей посложнее int'а, но с ними отдельная песня.
Re: 2 неявных приведения типа в одном вызове. Как?
Здравствуйте, MTimur, Вы писали:
MT>Хочется странного. Есть переменная. Нужно заменить ее чем-то, что позволит автоматом проверять значение этой переменной после любой ее модификации. MT>Накостылил вот такой велосипед. Нужно, чтобы после оператора += выполнился метод check. MT>Работает, но нужно обойтись без явного каста (в main()) без добавления в обертку всего зоопарка операторов. MT>Как заставить компилятор выполнить 2 приведения? Понимаю, что стандарт запрещает, но может быть есть какая-то хитрость?
я, может, чего не так понял, потому как напрашивается обычное:
class CInt
{
int m_i;
public:
//----------
CInt(const int i)
: m_i(i)
{}
//----------
CInt& operator+=(const int i)
{
m_i += i;
check();
return *this;
}
//----------operator int()
{
return m_i;
}
//----------private:
//----------void check(){ std::cout<<"checked";}
};
int main()
{
CInt n(0);
printf("%d\n", n); // 0
n += 10;//checked
printf("%d\n", n); // 10return 0;
}
Re[2]: 2 неявных приведения типа в одном вызове. Как?
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, MTimur, Вы писали: MT>>Работает, но нужно обойтись без явного каста (в main()) без добавления в обертку всего зоопарка операторов. К>Лень колбасить код, или другие причины?
Лень, но уже наколбасил. Спасибо!
Re: 2 неявных приведения типа в одном вызове. Как?
Здравствуйте, MTimur, Вы писали:
MT>Накостылил вот такой велосипед. Нужно, чтобы после оператора += выполнился метод check. MT>Работает, но нужно обойтись без явного каста (в main()) без добавления в обертку всего зоопарка операторов.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском