Ver Mensaje Individual
  #7  
Antiguo 14-06-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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:
Código Delphi [-]
// Llamamos a la función con un valor del tipo enumerado TOperation
FuncionMisteriosa (Ord (opRemove));

// Llamamos a la función con un valor del tipo enumerado TTypeKind
FuncionMisteriosa (Ord (tkClass));
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:
Código Delphi [-]
Procedure MetodoMisterioso <T> (Value :T);
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.
Responder Con Cita