Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2006
piccolo2101 piccolo2101 is offline
Miembro
 
Registrado: oct 2005
Posts: 63
Poder: 19
piccolo2101 Va por buen camino
Bueno,
intentando, quizás, acercarme más un poco a la solución que buscas de sSelect+sStatus, voy a explicarte un método que se me ha ocurrido:
Evidentemente un puntero a una función no es más que una dirección de memoria así que sSelect podría ser una dirección de memoria que inicialmente señalase a la función Select_A. Tambíen puedes haces que al iniciar tu aplicación se calculen las diferencias entre Select_A y el resto para saber que desplazamiento debes aplicar respecto a la dirección de memoria de Select_A y esos serán los valores de sStatus. Por ejemplo
Usaré valores enteros para explicarme mejor.
Select_A ----- dirección 100
Select_B ----- dirección 150
Select_C ----- dirección 75

sSelect = 100;
posibles valores de sStatus = 0 (si es Select_A), 50 (si es Select_B), -25 (si es Select_C).

Con esto, es posibles hacer en un momento dado una llamada a la función que quieras con sSelect+sStatus.

Respecto a lo de lenguaje compilado e interpretado discreparé un poquito, siempre desde mi ignorancia, porque lenguajes relativamente interpretados como java o perl requieren de una fase de precompilación para generar el código interpretado y en éste también se han traducido los nombres de funciones y demás por direcciones. Sé que perl tiene una función que permite hacer lo que quieres llamada eval si mal no recuerdo y es posible que realice un cálculo relativo de la posición de memoria de dicha función.

PD: Te recomiendo que calcules los desplazamientos de las funciones respecto a una base (en este caso Select_A) porque una vez los tengas ya puedes cambiar tu código y hacerlo constante ya que la distancia debería ser siempre la misma salvo que modifiques código.

Un saludo y gracias.

Última edición por piccolo2101 fecha: 30-01-2006 a las 09:47:11.
Responder Con Cita
  #2  
Antiguo 30-01-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Jonnathan:
Cita:
Y tambien recuerdo hace mucho vi por ahi una manera de llamar funciones pasandolas como una cadena de texto a una función del compilador que las ejecutaba ¿o tal vez era Visual Basic? .
En mi caso ese fue DBase....Clipper, y se llamaban "Macros", no solo funciones sino q se podían armar sentencias y además era un ejecutable (bueno..el último, DBase era otra vaina!)
piccolo2101:
Cita:
Evidentemente un puntero a una función no es más que una dirección de memoria así que sSelect podría ser una dirección de memoria que inicialmente señalase a la función Select_A. Tambíen puedes haces que al iniciar tu aplicación se calculen las diferencias entre Select_A y el resto para saber que desplazamiento debes aplicar respecto a la dirección de memoria de Select_A y esos serán los valores de sStatus. Por ejemplo
Usaré valores enteros para explicarme mejor.
Select_A ----- dirección 100
Select_B ----- dirección 150
Select_C ----- dirección 75
Jjjjjjjjjmmmmmmmmm, llevo algunos añitos jugando con punteros en todo cuanto pueda.......pero de ahí a jugar con los desplazamientos y diferencias entre ellos es algo tenebroso, yo particularmente no los emplearía así y menos sin saber si el compilador usa Overlay
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #3  
Antiguo 30-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La verdad creo que se están complicando demasiado. Se tienen tres funciones, Select_A, Select_B y Select_C y se les quiere llamar de manera genérica sabiendo como dato el estado "A", "B" o "C".

Si no se quiere introducir clases entonces basta con esta función:

Código Delphi [-]
function Select(Estado: Char): Integer;
begin
  case Estado of
    'A': Result := Select_A();
    'B': Result := Select_B();
    'C': Result := Select_C();
  end;
end;

simplemente llamándola con

Código Delphi [-]
Select(Estado);

// Saludos
Responder Con Cita
  #4  
Antiguo 30-01-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Eeeeeeehhhhhhhh....puess.........essssteeee....sip, es verdad, pero creo q a veces es necesario ahondar para casos extremos . Por lo menos a mi me ha servido .
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #5  
Antiguo 31-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por OSKR
a veces es necesario ahondar para casos extremos
Sí, pero a veces es extremo ahondar en casos innecesarios

Creo que termina uno confundiendo a la gente. De hecho me alegra que hayas mencionado el lado tenebroso.

// Saludos
Responder Con Cita
  #6  
Antiguo 31-01-2006
piccolo2101 piccolo2101 is offline
Miembro
 
Registrado: oct 2005
Posts: 63
Poder: 19
piccolo2101 Va por buen camino
Lightbulb

Hola,
estoy totalmente de acuerdo con la sencillez de la solución planteada por roman y, por supuesto, estoy más de acuerdocon las palabras de OSKR pero mi intención sólo era dar una posible solución al problema según se había planteado pero que yo nunca usaría. Básicamente era una respuesta al estilo : "Por poder, se puede..." que una solución viable.

Por cierto, aquí dejo otra más factible:
Se puede crear un array de punteros a funciones que inicialmente guarde las funciones Select_A, Select_B y Select_C en las posiciones 0,1,2 del array.
Sabiendo que sStatus es de tipo enumerado (p.ejemplo) y hacemos que el enumerado coincida con las posiciones dentro del array de las funciones se podría llamar a la función sin hacer distinción con case sólo con sSelect[sStatus].


Un saludo.
Responder Con Cita
  #7  
Antiguo 01-02-2006
cuburu cuburu is offline
Miembro
 
Registrado: mar 2005
Posts: 63
Poder: 20
cuburu Va por buen camino
Hola,
Ya metiendome en este tema yo diría lo siguiente:

Utilización de punteros.... mmmmm creo que no debido a que no es muy factible estar jugando con desplazamientos de memoria y direccionamientos esperando que la maquina nunca se atrofie. Java es un claro ejemplo de ello, eliminó el manejo de punteros debido a estos pequeños detalles jejeje.

Sería mejor trabajar con polimorfismo y creo que es más recomendable debido a que es una forma de programar ordenada y que también, o no se que opinen ustedes, ..... Delphi esta creado para trabajar de esa manera aunque a algunos de nosotros se nos olvida eso de vez en cuando jajajaja.

Buen debate chavos, más de estos temas...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llamada a una funcion que incluye en el nombre una variable papulo PHP 11 28-12-2005 16:38:19
Sobre cierto resultado de la función SHGetSpecialFolderPath dec API de Windows 3 01-06-2005 06:59:01
Error En Variable Double Red_Delphi Varios 3 03-09-2004 00:13:42
problema al llamar una función sgarrido Varios 3 27-07-2004 01:14:33
mostrar SOLO cliente de los que tengo un sólo registro Giniromero SQL 15 11-06-2004 12:33:19


La franja horaria es GMT +2. Ahora son las 18:52:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi