¿hay alguna función "StringToEnum" o una alternativa?

 

Hola, si lo hago

string a = EnumToString(MODE_SMMA);

obtengo:

a =" MODE_SMMA"

Ahora bien, me gustaría alguna función que hiciera justo lo contrario, me refiero a algo así como

int b = StringToEnum("MODE_SMMA");

b = 2

donde 2 es el valor int asociado a la constante: "MODE_SMMA"


Saludos, cyberglassed.

 
MODE_SMMA

ya es el valor entero 2.

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert tiene una gran lista de grupos de funciones de conversión.
Documentation on MQL5: Conversion Functions
Documentation on MQL5: Conversion Functions
  • www.mql5.com
Conversion Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

ya es el valor entero 2.

Lo que dices no se ajusta a mis necesidades. Como puedes leer en mi pregunta, sé cómo convertir de valor enum a cadena, pero lo que quiero hacer es justo lo contrario:

con el código:

int b = StringToEnum("MODO_SMMA");

Quiero obtener lo siguiente

b = 2

 

No hay StringToEnum.

MODE_SMMA

ya es el valor entero 2.

   int b=MODE_SMMA;
   Print("b= ",b);



int b;

string StringToEnum="MODE_SMMA";

if(StringToEnum=="MODE_SMMA"){b=2;}

Print("b= ",b);



 
cyberglassed:

Lo que dices no se ajusta a mis necesidades. Como puedes leer en mi pregunta, sé cómo convertir de valor enum a cadena, pero lo que quiero hacer es justo lo contrario:

con el código:

int b = StringToEnum("MODO_SMMA");

Quiero obtener lo siguiente

b = 2

También preguntaste si había una alternativa, que Marco señaló.
 

gracias chicos

 

gracias Alain por tu consejo pero en realidad no tengo una buena solución para mi problema,
así que tengo que tomar algunas soluciones extrañas.
Estaría muy bien que mql5 soportara la evaluación dinámica de código como la función eval(...) en PHP y Javascript,
entonces podríamos cargar pequeños trozos de códigos desde archivos externos (a veces muy interesantes) e incluso implementar la función StringToEnum fácilmente como:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

En otras palabras, con el apoyo de la función eval (...) podríamos resolver muchas cosas al mismo tiempo.

Eso podría ser un consejo muy interesante para el equipo de desarrolladores de MT5.

Gracias, Cyberglassed.
 
cyberglassed:

Gracias Alain por tus consejos pero en realidad no tengo una buena solución para mi problema,
así que tengo que tomar algunas soluciones extrañas.
Estaría muy bien que mql5 soportara la evaluación dinámica de código como la función eval(...) en PHP y Javascript,
entonces podríamos cargar pequeños trozos de códigos desde archivos externos (a veces muy interesantes) e incluso implementar la función StringToEnum fácilmente como:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

En otras palabras, con el apoyo de la función eval (...) podríamos resolver muchas cosas al mismo tiempo.

Eso podría ser un consejo muy interesante para el equipo de desarrolladores de MT5.

Gracias, Cyberglassed.
La capacidad ya está ahí en MQL para cargar bibliotecas externas (como DLLs) o archivos específicos #include y hacer que suceda de esta manera. Como MQL es también un lenguaje OOP, en teoría, podrías escribir el código de esa función tú mismo, y simplemente incluirlo en tus programas en los que necesitas esa funcionalidad en particular. Ya sea dentro del código de tu EA, o como un archivo externo.
 
JD4:
La capacidad ya está allí en MQL para cargar ya sea bibliotecas externas (como DLLs) o archivos específicos #include y hacer que suceda de esta manera. Como MQL es también un lenguaje OOP, en teoría, usted podría escribir ese código de la función a ti mismo, y sólo incluirlo en sus programas que usted necesita que la funcionalidad particular en. Ya sea dentro del código de su EA, o como un archivo externo.

gracias JD4, pero lamentablemente eso no resuelve mis requerimientos porque cuando cargas DLLs externas le pasas unos parámetros y obtienes un resultado en base a esos parámetros, eso está bien, pero ahí estás programando en otro lenguaje/entorno/lugar y no exactamente en mql5. Yo he programado DLLs personalizadas y las he cargado en mql5 cuando para mí no importa el lenguaje que procesará mis parámetros, pero en este hilo quería que los datos se procesaran en mql5 para poder hacer uso (por ejemplo) de variables locales y globales. Si usas DLLs externas, ahí no sabrás de los valores de las variables locales y globales, porque es como una máquina de procesamiento externa. Entonces, si tienes una función como eval(...) disponible en mql5 (ahora mismo no es el caso porque no está implementada) entonces puedes hacer uso de variables globales y locales, e incluso de funciones.