FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Enumerado genérico como parámetro
Hola a todos,
En esta oportunidad lo que necesito es ver como se puede hacer para pasar por parámetro en una función un enumerado genérico. Lo que quiero hacer es algo similar a lo que permite C#, o sea lo siguiente. Código:
public Condicion(System.enum Valor, .......) { }
se pueda pasar cualquiera de los valores de los dos enumerados y no tener que hacer dos funciones, una para cada enumerado. Si tengo dos enumerados la cosa podría estar bien, pero si tengo muchos mas ya no funciona y se complica. Espero que se entienda y cualquiercosa me consultan y aclaro lo que sea necesario. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#2
|
||||
|
||||
Hola elrayo76.
Si habláramos de C++, es simple hacerlo usando template, Código PHP:
Fijate si podes hacer algo con Generics Types, tal vez por ahí vayan los tiros... Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 13-06-2015 a las 05:29:31. Razón: sintáxis |
#3
|
||||
|
||||
El enunciado y código de la pregunta parece orientado a C++ luego esta es la respuesta correcta.
En realidad un Template expande las funciones para cada clase, el programador escribe una función y el compilador escribe tantas como sean necesarias. Saludos. |
#4
|
|||
|
|||
Para ver si con esto me pueden ayudar.
Lo que quiero hacer es poder obtener el nombre del dato del enumerado que se le pasa como parámetro a la función y no el valor del mismo. Se que con GetEnumName() se obtiene el nombre, pero lo que me falta es poder pasar genéricamente los enumerados para no tener que hacer cada vez que lo necesite una nueva función por cada enumerado. Lo que haria es tener en los enumerados como cada uno de los datos los nombres de los campos de las tablas y pasarlos a una función para armar una sentencia SQL para la parte del Where. Esto además de otros datos que recibirá la función en cuestión. Si lo pensamos abría que escribir la misma funcón para cada una de las tablas y eso es lo que no quiero hacer. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#5
|
||||
|
||||
En ese caso, creo que la opción del método con parámetro de tipo sería lo más indicado. Aplicando la función TypeInfo sobre T para obtener el PTypeInfo que GetEnumName necesita.
|
#6
|
|||
|
|||
Gracias gente por sus respuestas...
Veré de hacerlo usando el TypeInfo. Si llego a lograr algo les comentare que solución le dí por si a alguien le puede servir. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#7
|
||||
|
||||
elrayo76,
Cita:
Revisa este código: El código anterior en Delphi 7 sobre Windows 7 Profesional x32, Ejemplifica como pasar a una función N cantidad de valores de tipo Enumerado por medio de un Arreglo Dinámico de tipo Variant, como se muestra en la siguiente imagen: Espero sea útil Nelson. Última edición por nlsgarcia fecha: 13-06-2015 a las 17:33:28. |
#8
|
|||
|
|||
No es exactamente lo que necesito pero tendría que ver si me sirve... Lo que quiero hacer es poder pasar a la función solamente uno de los datos de cualquiera de todos los enumerados que pueda tener.
Si a alguien se le ocurre o conoce alguna otra forma de hacer lo que necesito se los agradecería. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#9
|
||||
|
||||
elrayo76,
Cita:
Revisa este código: El código anterior en Delphi 7 sobre Windows 7 Professional x32, es continuación del propuesto en el Msg #3 y Muestra como enviar 0, 1 ó N valores de tipo Enumerado por medio de un Arreglo Dinámico de tipo Variant, como se muestra en la siguiente imagen: Pregunto: 1- ¿Que versión de Windows (XP, 7, 8, 8.1, 10, Otra) y de cuantos bits (x32, x64) usa tu aplicación? 2- ¿Que versión de Delphi usa tu aplicación?. Espero sea útil Nelson. |
#10
|
|||
|
|||
1- ¿Que versión de Windows (XP, 7, 8, 8.1, 10, Otra) y de cuantos bits (x32, x64) usa tu aplicación?
Windows 7 de 64 bits. Pero creo que esto no viene al acaso. 2- ¿Que versión de Delphi usa tu aplicación?. En estoss momento estoy usando Delphi XE8, pero bien podría haber sido con XE6. Igualmente creo que no conoces si existe alguna forma para pasar un parámetro de una función como un tipo enumerado genéricos (por genérico me refiero a que no le tenga que decir a la función que el parametro es TEnumA o TEnumB, sino que sea algo que le pueda pasar cualquier enumerado). Igualmente gracias por la respuesta. Ya veré si lo resuelvo como tu me dices o buscaré alguna otra forma de hacerlo. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#11
|
||||
|
||||
Hola elrayo76.
Hay una duda importante en el aire: ¿la función debe poder distinguir cuál es el tipo del valor pasado como parámetro? ¿Podrías darnos una idea de qué hará la función con él? A diferencia de C, Delphi no permite que los tipos enumerados sean directamente compatibles con los tipos entero, pero los considera a ambos como ordinales. Eso los hace fácilmente intercambiables, por ejemplo, usando la función Ord: La desventaja de esto es que la función debe declarar su parámetro de tipo entero, con lo cual se pierde la valiosa información sobre cuál era el tipo del valor pasado. En caso de que la función deba discernir el tipo del valor, una alternativa viable es que la función sea un método con parámetro de tipo, también conocido como método genérico: En este caso la desventaja es que Delphi no cuenta por ahora con un tipo de restricción enumerated para los parámetros de tipo, por lo que el compilador admitiría cualquier tipo de dato para T. NOTA: El enlace dado por ecfisa puede servirte como introducción al uso de genéricos en Delphi, fabulosa característica disponible desde la versión 2009. Un cordial saludo. Al González. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Imprimir reporte enumerado no desde 1 | zugazua2001 | Impresión | 1 | 20-04-2009 11:42:02 |
procedimiento de asignación genérico | gushynet | OOP | 23 | 09-09-2008 10:50:15 |
Enumerado | Guillermo80 | Varios | 8 | 09-03-2008 18:06:57 |
enumerado | bosterito | Varios | 3 | 15-01-2007 20:42:53 |
reporte generico | piyugo | Impresión | 8 | 07-05-2004 18:20:03 |
|