Re: 2 неявных приведения типа в одном вызове. Как?
От: Chorkov Россия  
Дата: 27.12.16 21:16
Оценка:
Здравствуйте, 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.