(Consula) ¿Se puede modificar una función en tiempo de ejecución?

Iniciado por Seyro97, 3 Octubre 2015, 08:35 AM

0 Miembros y 1 Visitante están viendo este tema.

Seyro97

Hola. La pregunta viene del siguiente problema que me he planteado: quiero hacer un representador de funciones. El usuario ha de introducir una función cualquiera [ f(x)  = ...].

La idea que he tenido es convertir el string en código máquina (siguiendo una sintaxis xD)

La función en primera instancia se vería así:

Código (cpp) [Seleccionar]
float funcion(float x) {
       // Aquí se insertaría el código en código máquina
       
       return x;
}


Después de que el usuario haya introducido la función f(x) = x + 2, la función (en C++, Visual Studio)  se vería así:

Código (cpp) [Seleccionar]
int funcion(int x) {
_asm {
add x, 2
};

return x;
}


PD.: Quiero usar registros de 32 bits

Gracias
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

ivancea96

Te propongo otras opciones primero:
-Utilizar un lenguaje como python para realizar la ecuacion en tiempo de ejecucion
-Interpretar la ecuacion con C++

C++ es un lenguaje compilado. Puedes meter en una variable el binario de una función y llamarla como si de una funcion se tratase. Pero eso ya es muy complicado.

Seyro97

Cita de: ivancea96 en  3 Octubre 2015, 09:36 AM
Te propongo otras opciones primero:
-Utilizar un lenguaje como python para realizar la ecuacion en tiempo de ejecucion
-Interpretar la ecuacion con C++

C++ es un lenguaje compilado. Puedes meter en una variable el binario de una función y llamarla como si de una funcion se tratase. Pero eso ya es muy complicado.

Me interesa lo complicado (bueno, quizás no, pero quiero ver cómo se hace!!). ¿Cómo podría llamar a la función guardada en una variable (Supongo que de tipo double *)?
Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!

ivancea96

Una función es un conjunto de bytes. Como tal, se pueden interpretar como código máquina, o como datos.

No me voy a extender. Lo que quieres no necesitará eso, pues para ello necesitarás realizar a mano algo parecido a un compilador.

Seyro97

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!