¿Cómo obtener la longitud del enum y del ítem en MQL4/MQL5? - página 2

 
Alain Verleyen:
La longitud nunca es desconocida y este tema es sólo el resultado de un mal diseño.
Este requisito proviene de un proyecto de AutoTester.
En muchos Indicadores/EAs, los parámetros de entrada contienen un enum personalizado, necesitamos averiguar qué elemento (y valor relativo) en el enum.
Así que, no digas "mal diseño". Blah...blah...
 
Xiangdong Guo:
Este requisito proviene de un proyecto de AutoTester.
En muchos Indicadores/EAs, los parámetros de entrada contienen un enum personalizado, necesitamos averiguar qué elemento (y valor relativo) en el enum.
Así que, no digas "mal diseño". Blah...blah...
Por supuesto que es un mal diseño. Pero no es un problema para mí.
 
Marco vd Heijden:
¿Qué quiere decir con "longitud de enum"?
enum fruit
  {
   APPLE=0,//APPLE
   BANANA=1,//BANANA
   GRAPE=2,//GRAPE
   ORANGE=3,//ORANGE
   CARROT=4,//CARROT
  };
  
sinput fruit type;//PICK A FRUIT 

Tal vez la zanahoria no es una fruta... todavía no entiendo lo que Xiangdong Guo quiere decir con 'longitud de enum'

¿El número de letras de cada nombre de la cadena de opciones?

¿Cuántas opciones posibles?

¿El valor numérico de la opción?

No sólo es un mal diseño, sino que tampoco tiene muy claro lo que quiere decir.

 
Marco vd Heijden:
El número de valores, así que 5 en tu ejemplo de las frutas.
 
Alain Verleyen:
El número de valores, por lo que 5 en su ejemplo de las frutas.

Estoy de acuerdo en que es estática no puede ser variable por lo que siempre será un valor fijo conocido para empezar.

Sin embargo, si Xiangdong Guo está probando indicadores que no ha diseñado o escrito él mismo, y quiere saber o detectar los parámetros de entrada automáticamente...

No estoy seguro de cómo saber el número de opciones disponibles podría ayudar, tal vez él quiere cruzar las pruebas de todas las opciones disponibles y simplemente está buscando el número de pruebas a ejecutar?

Yo escanearía las opciones asumidas para resolver estos valores una vez que intente convertir fuera de los bordes de las opciones disponibles se generará no puede convertir error enum ya que no existe.

 
Marco vd Heijden:

MT4/MT5 utilizan la función C++/C# para recuperar el elemento de la lista. Pero MetaQuotes no porta esas funciones a MQL4/MQL5. Hum...hum...

enum DURATION_INTERVALS  // Enumeration of named constants
   {
    month=1,     // Interval of one month
    two_months,  // Two months
    quarter,     // Three months - quarter
    halfyear=6,  // Half a year
    year=12,     // Year - 12 months
   };

input DURATION_INTERVALS HistoryDuration = month;

 
Xiangdong Guo:

MT4/MT5 utilizan la función C++/C# para recuperar el elemento de la lista. Pero MetaQuotes no porta esas funciones a MQL4/MQL5. Hum...hum...

¿Qué función? ¿Cuál es el problema? ¿Por qué quieres hacer un bucle a través de los elementos del enum?
 
Alain Verleyen:
¿Qué función? ¿Cuál es el problema? ¿Por qué quieres hacer un bucle a través de los elementos del enum?

Si alguien quiere/necesita hacer algo que no es posible con MQL no significa necesariamente "mal diseño".

Para iniciar el tema: no es posible hacer lo que quieres en la versión actual de MQL.

La única manera es copiar todos los elementos en una matriz y hacer su bucle utilizando esa matriz. Pero sólo es posible cuando / si usted puede modificar el código.

 
Andrey Barinov:

Si alguien quiere/necesita hacer algo que no es posible con MQL no significa necesariamente "mal diseño".

Para iniciar el tema: no es posible hacer lo que quieres en la versión actual de MQL.

La única manera es copiar todos los elementos en una matriz y hacer su bucle utilizando esa matriz. Pero sólo se puede hacer cuando / si usted puede modificar el código.

Usar un enum en lugar de un array es un mal diseño. ¿No es así?

 
Alain Verleyen:

Usar un enum en lugar de un array es un mal diseño. ¿No lo es?

No, usar un array en lugar de un enum es un mal diseño.

Ejemplo: Imagina que tienes un valor de cadena. Y la tarea es averiguar si esta cadena es igual/contiene en ella uno de los nombres de los elementos del enum (EnumToString()).

¿Cómo resolverías esto?