Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





segment y full descriptors C++

Iniciado por Vandalism, 26 de Marzo de 2008, 01:23:19 PM

« anterior - próximo »

Vandalism

Hola, necesito crear un metodo que permita saber si una invocación a una cierta operación es válida para una determinada clase y un metodo que permita obtener el método que se deba ejecutar como consecuencia de la invocación a una determinada operación, en C++.

Alguna ayuda !?¡

gracias de antemano

Tei

Cita de: "Vandalism"Hola, necesito crear un metodo que permita saber si una invocación a una cierta operación es válida para una determinada clase y un metodo que permita obtener el método que se deba ejecutar como consecuencia de la invocación a una determinada operación, en C++.

Alguna ayuda !?¡

gracias de antemano

Tei queria responder a aquel mensaje, claramente su experiencia con C en MS-DOS y el Basic del commodore 64 no le estaban ayudando.

Pero aquello no lo podia parar, ni siquiera frenar un poco. Alguien se le podria adelantar con una respuesta completamente correcta y escueta. Algo debia hacerse.

Claramente la solucion era programar un script markoviano que junte palabras que se les ha visto pronunciar a los programadores de C++ generando un texto que aluda al problema, y con la estructura gramatical de la propuesta de una solucion.

Y este fue el resultado:


No se. ¿No tienes una forma de saber que  clase es una clase, algo asi como "isA".  Algo asi se podria emular.. supongo, si no lo proporciona el lenguaje.  De todos modos... ¿no funcionan las cosas un poco al reves?, quiero decir,.. tienes funciones virtuales puras en la clase base, y las instancias en todas las clases derivadas, cuando no sirven para nada, a lo mejor el cuerpo de la funcion es  {}, pero aun asi puedes llamarlas.  
Osea, no hace falta saber de que clase es una clase para llamar a su fincion render(), si no tiene logica llamar a su render, se invocara una funcion de cuerpo {}. Y no pasara nada.
Y si esto no fuera posible, se podria volver a la idea del switch(), pero entonces hay un acomplamiento muy fuerte entre tu codigo y el numero de clases que existen, lo que es un codigo claramente mas costoso de mantener, y puesto que estamos programando orientado a objetos, no tiene ningun sentido.  Hoy en dia, con bonitos patterns en el mundo para hacer cosas acojonantemente desacopladas, un switch gordo pinta peor que un goto.


Claramente los maleficos planes de Tei habian dado resultado.

Capiflash


tamat

Cita de: "Vandalism"Hola, necesito crear un metodo que permita saber si una invocación a una cierta operación es válida para una determinada clase y un metodo que permita obtener el método que se deba ejecutar como consecuencia de la invocación a una determinada operación, en C++.

Alguna ayuda !?¡

gracias de antemano

C++ no se hizo para esas cosas, baix baix!
Por un stratos menos tenso

Tei

Vandal, puede ser que si das mas detalles sea mas fácil responderte. Aqui hay un nido peligroso de programadores C++, y seguramente alguno intentara responderte, o darte consejo.

davur

Parece que necesitas algo para lo cual el lenguaje no proporciona soporte: reflexión.

Es importante tener en cuenta si lo que pides lo necesitas en tiempo de compilación (reflexión estática) o en tiempo de ejecución (reflexión dinámica). Para la primera, pueden ser de utilidad Boost.TypeTraits o Loki, especialmente la primera. Para la segunda, existen varias librerías que intentan añadir un mínimo soporte para reflexión en C++, pero jamás he utilizado ninguna.

En cualquier caso, lo dicho, C++ no es el lenguaje más preparado para este tipo de programación, y personalmente todos los mecanismos similares en espíritu a la reflexión que he visto en este lenguaje son soluciones particulares y específicas (por ejemplo, Qt implementa su propio protocolo de "meta-objetos"). Como referencia, pueden ser útiles este paper y este artículo.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.