Здравствуйте, MTimur, Вы писали:
MT>Хочется странного. Есть переменная. Нужно заменить ее чем-то, что позволит автоматом проверять значение этой переменной после любой ее модификации.
MT>Накостылил вот такой велосипед. Нужно, чтобы после оператора += выполнился метод check.
MT>Работает, но нужно обойтись без явного каста (в main()) без добавления в обертку всего зоопарка операторов.
MT>Как заставить компилятор выполнить 2 приведения? Понимаю, что стандарт запрещает, но может быть есть какая-то хитрость?
Я бы так сделал (правда синтаксис вызовов изменится):
template<typename T>
class CAutoVar
{
struct Holder {
T value;
} holder;
public:
std::shared_ptr<Holder>
operator -> ()
{
return std::shared_ptr<Holder>( &holder,
[&](Holder*ptr){ check(); }
);
}
void check()
{
std::cout<<"New value :"<<holder.value<<std::endl;
}
};
void foo(int & value )
{
value*=3;
}
int main()
{
CAutoVar<int> n;
n->value = 10;
n->value += 20;
foo( n->value );
return 0;
}