Souhaits pour MT5 - page 103

 
A100:

ME5 donne une erreur lors de la compilation, à mon avis injustifiée.


Bon point - je le ferai.
 

Je voudrais que l'enum prédéfini de la forme ENUM_XXX soit effectivement numéroté 1, alors qu'actuellement il est numéroté par défaut, c'est-à-dire 0. La question n'est pas de changer les valeurs par défaut, mais de remplacer

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

il devrait l'être

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

Le raisonnement est le suivant - un exemple :

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

Lorsque j'analyse la valeur de request.type quelque part dans le code, si elle est égale à 0, je ne peux pas comprendre si elle n'a pas été initialisée ou si elle a été initialisée.

request.type = ORDER_TYPE_BUY;

C'est le cas avec la plupart des enums prédéfinis de la forme ENUM_ XXX équivalent de RadioButton et nécessite une quantité déraisonnable de complexité pour gérer correctement la situation actuelle.

 
Malheureusement, cela n'est pas possible en raison du maintien de la compatibilité avec le reste des langues où la numérotation est de zéro.
 
Renat: Malheureusement, cela n'est pas possible en raison du maintien de la compatibilité avec d'autres langues où la numérotation est à partir de zéro.

Qu'est-ce qui vous empêche d'écrire un identifiant neutre comme premier membre d'une énumération prédéfinie ? Par exemple :

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

La "numérotation à partir de zéro" sera préservée, et les variables non initialisées peuvent être facilement évaluées.

 
Yedelkin:

Qu'est-ce qui vous empêche d'écrire un identifiant neutre comme premier membre d'une énumération prédéfinie ? Par exemple :

Et si vous pensez aux autres qui utilisent déjà l'ensemble original d'enums ? Sans parler du regard perplexe de l'ensemble du complexe des serveurs.

En général, la question n'est pas posée correctement. Le développeur ne devrait pas être paresseux et obliger le reste du monde à s'adapter à lui-même en autodétruisant ce même monde.

 
Renat: Et si vous pensez aux autres qui utilisent déjà l'ensemble original d'enums ?

Eh bien, réfléchissons à nouveau, "sur le reste". À quoi servent les identificateurs de constantes nommées? - Correct, afin d'utiliser ces identifiants. De plus, pour utiliser ces identificateurs, il n'est pas nécessaire de savoir quelles valeurs spécifiques sont attribuées aux membres de l'énumération. Ou supposez-vous que les programmeurs compétents utilisent des identificateurs au lieu de découvrir les valeurs par défaut des membres de l'enum, puis effectuent des vérifications sur la base de ces valeurs par défaut ?

Renat : Sans parler de la vue perplexe de l'ensemble du complexe de serveurs.

C'est-à-dire qu'il n'est pas difficile de mettre en œuvre la suggestion elle-même, n'est-ce pas ?

Renat : En fait, cette question est mal posée. Le développeur ne doit pas être paresseux et forcer le reste du monde à s'adapter à lui en autodétruisant ce même monde.

L'auteur de ce fil n'avait pas l'intention de détruire le monde des autres par sa paresse. Il a seulement fait une suggestion spécifique d'amélioration. Et expliqué que la valeur zéro s'avère être surchargée.

 

J'aimerais introduire au moins une classe comme portée pour les éléments portant un nom d'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 }; //ошибка
};

Raison d'être des classes : vous devez trouver un nom unique qui peut entrer en conflit de manière inattendue avec des noms de bibliothèques (y compris de tiers) et/ou des noms prédéfinis. En outre, vous pourriez utiliser des noms similaires d'éléments d'énumération SL, TP, PRICE, etc. dans plusieurs classes simultanément sans crainte de conflits.

Raison d'être des fonctions : non critique, mais en même temps

 
A100:

Nous souhaitons introduire un champ d'application pour les éléments portant un nom d'enum.

Raison d'être des classes : vous devez trouver un nom unique qui peut entrer en conflit de manière inattendue avec un nom de bibliothèque et/ou un nom prédéfini. De plus, vous pourriez utiliser des noms similaires pour les éléments de l'enum SL, TP, PRICE, etc. dans plusieurs classes en même temps sans crainte de conflits.

Raison d'être des fonctions : non critique, mais en même temps

Qu'en est-il en C++ ?
 
sergeev:
Mais qu'en est-il en C++ ?

C'est de là que viennent les jambes - un paradoxe, mais seulement maintenant (quand il y a des restrictions), j'ai commencé à comprendre pourquoi tout était fait là :)

Bien sûr, vous pourriez vous en passer - écrire un nom unique pour toutes les classes, mais pour les gros programmes, et surtout pour les bibliothèques destinées à un usage général - ce n'est pas une option

 
A100: J'aimerais que les enums prédéfinis de la forme ENUM_XXX équivalant à RadioButton soient numérotés 1, alors qu'actuellement ils sont numérotés par défaut, c'est-à-dire 0. La question n'est pas de changer les valeurs par défaut, mais plutôt de ...

Essayez ceci (pour "initialisation") :

WRONG_VALUE.

Une constante peut être implicitement convertie en n'importe quel type d'énumération.

-1

Raison: