Deseos para MT5 - página 103

 
A100:

ME5 da un error al compilar, en mi opinión injustificado.


Es cierto, lo haré.
 

Me gustaría que el enum predefinido de la forma ENUM_XXX tuviera realmente el número 1, mientras que ahora tiene el número por defecto, es decir, el 0. La pregunta no es para cambiar los valores por defecto, sino para sustituir

enum ENUM_ORDER_TYPE {
        ORDER_TYPE_BUY,
        ORDER_TYPE_SELL, ...
};

debe ser

enum ENUM_ORDER_TYPE {
        ORDER_TYPE_BUY = 1,
        ORDER_TYPE_SELL, ...
};

El razonamiento es el siguiente: un ejemplo:

MqlTradeRequest request { ...
        ENUM_ORDER_TYPE     type; ...
}

Cuando analizo el valor de request.type en alguna parte del código, si es igual a 0, no puedo entender si no fue inicializado o fue inicializado.

request.type = ORDER_TYPE_BUY;

Este es el caso de la mayoría de los enums predefinidos de la forma ENUM_ XXX equivalente a RadioButton y requiere una complejidad desmedida para manejar correctamente la situación actual

 
Lamentablemente, esto no es posible debido a que hay que mantener la compatibilidad con el resto de los idiomas en los que la numeración es desde cero.
 
Renat: Lamentablemente, esto no es posible debido a que hay que mantener la compatibilidad con otros idiomas en los que la numeración es a partir de cero.

¿Qué le impide escribir un identificador neutro como primer miembro de una enumeración predefinida? Por ejemplo:

enum ENUM_ORDER_TYPE 
  {
   ORDER_TYPE_undefined,
   ORDER_TYPE_BUY,
   ORDER_TYPE_SELL, 
   ...
  };

Tanto la "numeración desde cero" será preservada, como las variables no inicializadas pueden ser fácilmente evaluadas.

 
Yedelkin:

¿Qué le impide escribir un identificador neutro como primer miembro de una enumeración predefinida? Por ejemplo:

¿Y si piensas en los demás que ya están usando el conjunto original de enums? Eso sin contar con la mirada perpleja de todo el complejo de servidores.

En general, la pregunta no está bien planteada. El desarrollador no debería ser perezoso y obligar al resto del mundo a adaptarse a sí mismo autodestruyendo ese mismo mundo.

 
Renat: ¿Y si piensas en otros que ya están usando el conjunto original de enums?

Bueno, pensemos de nuevo, "sobre los otros". ¿Para qué sirven los identificadores de constantes con nombre? - Correcto, para poder utilizar estos identificadores. Además, para utilizar estos identificadores, no es absolutamente necesario saber qué valores específicos se asignan a los miembros de la enumeración. ¿O supone que los programadores competentes utilizan identificadores en lugar de averiguar los valores por defecto de los miembros del enum, y luego hacen comprobaciones basadas en estos valores por defecto?

Renat : Esto sin contar con la desconcertante vista de todo el complejo de servidores.

Es decir, no es difícil aplicar la sugerencia en sí, ¿verdad?

Renat : En realidad esta pregunta está mal planteada. El desarrollador no debería ser perezoso y obligar al resto del mundo a adaptarse a sí mismo mediante la autodestrucción de este mismo mundo.

El autor de este hilo no pretendía destruir los mundos de los demás por su pereza. Sólo hizo una sugerencia concreta de mejora. Y explicó que el valor cero resulta estar sobrecargado.

 

Me gustaría introducir al menos una clase como ámbito para los elementos con nombre de enum,

void test1() { enum ENUM_1 { ELEM1 }; }
void test2() { enum ENUM_2 { ELEM1 }; } //ошибка

class A {
        enum ENUM_A { ELEM1 };
};
class B {
        enum ENUM_B { ELEM1 }; //ошибка
};

Justificación de las clases: hay que dar un nombre único que puede entrar en conflicto de forma inesperada con nombres de bibliotecas (incluso de terceros) y/o predefinidos. Además, podría utilizar nombres similares de elementos enuméricos SL, TP, PRICE, etc. en varias clases simultáneamente sin temor a conflictos.

Justificación de las funciones: no es crítica, pero al mismo tiempo

 
A100:

Nos gustaría introducir un ámbito para los elementos con nombre de enum

Razón de ser de las clases: hay que dar un nombre único que puede entrar en conflicto inesperadamente con un nombre de biblioteca y/o predefinido. Además, podría utilizar nombres similares para los elementos enum de SL, TP, PRICE, etc. en varias clases al mismo tiempo sin temor a conflictos.

Justificación de las funciones: no es crítica, pero al mismo tiempo

¿Qué pasa con esto en C++?
 
sergeev:
¿Pero cómo es en C++?

De ahí vienen las piernas - una paradoja, pero sólo ahora (cuando hay restricciones), empecé a entender por qué todo se hizo allí :)

Por supuesto, se podría prescindir de él - para escribir un nombre único para todas las clases, pero para los programas grandes, y especialmente para las bibliotecas destinadas al uso general - no es una opción

 
A100: Me gustaría que los enums predefinidos de la forma ENUM_XXX realmente equivalentes a RadioButton estuvieran numerados en 1, mientras que ahora están numerados por defecto, es decir, en 0. La cuestión no es cambiar los valores por defecto, sino ...

Pruebe esto (para la "inicialización"):

WRONG_VALUE.

Una constante puede ser implícitamente lanzada a cualquier tipo de enum.

-1