Me olvide de mencionar que no por eso deja de ser un mejor o un peor
lenguaje, recordemos que el lenguaje de programacion no es mas que una
herramienta y como toda herramienta es la mejor para un determinado
proposito, y de como se hace uso de esa herramienta, pero eso ya queda en
responsabilidad nuestra.

Saludos
Pablo

El día 24/04/08, Pablo Martín Viva <[EMAIL PROTECTED]> escribió:
>
> En general en casi todos los lenguajes vas a poder hacer lo mismo, de mayor
> o menor medida, y en algunos te facilita mucho las cosas la sintaxis del
> lenguaje porque fue pensado y escrito teniendo en cuenta soportar esas
> cosas, y en otros no porque no fue pensado para eso... Sacando casos
> extremos en todos los lenguajes podes hacer casi todo.
>
> Esto pasa con el ejemplo anterior, en C++ podes hace properties como
> muestra el ejemplo... ahora, es natural o es engorroso hacerlo? Como se
> puede ver es medio engorroso porque el lenguaje no fue pensado para eso...
>
> Saludos
> Pablo
>
> El día 24/04/08, Leandro Lucarella <[EMAIL PROTECTED]> escribió:
>>
>> Emilio Astarita, el 24 de abril a las 11:24 me escribiste:
>> > > Creo que el único lenguaje OO más o menos popular que no soporta esto
>> es
>> > > Java (sé que, al menos, Pyton, PHP, Ruby, C++, C# y D lo soportan de
>> una
>> > > forma u otra).
>> > >
>> >
>> > Pregunta ¿En C++ se haría con sobrecarga de operadores? Si es así, como
>> > se haría con los tipos básicos?
>>
>> Haciendo una clase "proxy", va un ejemplo simplón pero funcional:
>>
>> --------------------------------------------------------------------------
>> #include <iostream>
>>
>> template <typename Type, typename Host, Type (Host::*Get)() const,
>>                 void (Host::*Set)(const Type&)>
>> struct property
>> {
>>         Host& host;
>>         property(Host& host): host(host) {}
>>         // set
>>         property& operator=(const Type& x) { (host.*Set)(x); }
>>         // get
>>         operator Type() const { return (host.*Get)(); }
>> };
>>
>> struct clase
>> {
>>         clase(): c(*this) {}
>>         int real_c;
>>         int get_c() const
>>         {
>>                 std::cout << "obteniendo c\n";
>>                 return real_c;
>>         }
>>         void set_c(const int& c)
>>         {
>>                 std::cout << "seteando c\n";
>>                 real_c = c;
>>         }
>>         property< int , clase, &clase::get_c, &clase::set_c > c;
>> };
>>
>> int main()
>> {
>>         clase x;
>>         x.c = 1;
>>         std::cout << "valor = " << x.c << "\n";
>>         return 0;
>> }
>> --------------------------------------------------------------------------
>>
>> 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". Por ejemplo:
>> x.c++;
>> No va a tener en efecto en x, porque se va a modificar un temporal. Igual
>> esto no debería ser un impedimento, porque en general, si un getter
>> obtiene una referencia, ya rompiste todo posibilidad de cambiar la
>> implementación interna en un futuro si el atributo "real_c" deja de
>> existir (o si cambia a un tipo incopatible o algo así).
>>
>> PD: Sí, advertí que era engorroso y rebuscado en C++ =)
>>
>> PD: Va todo publico a propósito así sigue el flame ;)
>>
>>
>> --
>> Leandro Lucarella (luca) | Blog colectivo:
>> http://www.mazziblog.com.ar/blog/
>>
>> ----------------------------------------------------------------------------
>> GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
>>
>> ----------------------------------------------------------------------------
>> <original> [Penis Uptime: 2days 13hrs 59mins 35secs]
>> <Yapa> viagra? :)
>> <original> yea, 20 pills
>>
>> _______________________________________________
>> Lista de correo Programacion.
>> [email protected]
>> http://listas.fi.uba.ar/mailman/listinfo/programacion
>>
>>
>
>
> --
> Si yo tengo una manzana y tú tienes una manzana, luego de intercambiarlas
> ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea, luego
> de intercambiarlas ambos tenemos dos ideas.
>
> Apoyando a la comunidad Open Source.
>
> Facebook prifile:
> http://www.facebook.com/profile.php?id=1244601012
> Orkut prifile:
> http://www.orkut.com/Profile.aspx?uid=12594853021246287134




-- 
Si yo tengo una manzana y tú tienes una manzana, luego de intercambiarlas
ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea, luego
de intercambiarlas ambos tenemos dos ideas.

Apoyando a la comunidad Open Source.

Facebook prifile:
http://www.facebook.com/profile.php?id=1244601012
Orkut prifile:
http://www.orkut.com/Profile.aspx?uid=12594853021246287134
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a