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