Leandro Lucarella wrote:
Como bug evidente tiene que el tipo de retorno no puede ser por
referencia, por lo que no se pueden usar operadores que muten el tipo
"proxiado".

???
#include <iostream>

template <typename Type, typename Host, Type& (Host::*Get)(),
                Type& (Host::*Set)(const Type&)>
struct property
{
        Host& host;
        property(Host& host): host(host) {}
        // set
        Type& operator=(const Type& x) { (host.*Set)(x); return (host.*Get)();}
        // get
        operator Type&() const { return (host.*Get)(); }
};

struct clase
{
        clase(): c(*this) {}
        int real_c;
        int& get_c()
        {
                std::cout << "obteniendo c\n";
                return real_c;
        }
        int& set_c(const int& c)
        {
                std::cout << "seteando c\n";
                real_c = c;
                return real_c;
        }
        property< int , clase, &clase::get_c, &clase::set_c > c;
};

int main()
{
        clase x;
        x.c = 3;
        x.c++;
        std::cout << "valor = " << x.c << "\n";
        return 0;
}

--
Hay dos cosas que son infinitas: el Universo y la estupidez humana. Y del Universo no estoy tan seguro
        -- Albert Einstein
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a