Auguri per MT5 - pagina 103

 
A100:

ME5 dà un errore durante la compilazione, a mio parere ingiustificato.


Punto giusto - lo farò.
 

Vorrei che l'enum predefinito della forma ENUM_XXX sia effettivamente numerato 1, mentre attualmente è numerato di default, cioè 0. La domanda non riguarda il cambiamento dei default, ma la sostituzione di

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

dovrebbe essere

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

Il ragionamento è il seguente: un esempio:

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

Quando analizzo il valore request.type da qualche parte nel codice, se è uguale a 0, non riesco a capire se non è stato inizializzato o è stato inizializzato.

request.type = ORDER_TYPE_BUY;

Questo è il caso della maggior parte degli enum predefiniti della forma ENUM_ XXX equivalente a RadioButton e richiede una quantità irragionevole di complessità per gestire correttamente la situazione attuale

 
Sfortunatamente, questo non è possibile per mantenere la compatibilità con il resto delle lingue in cui la numerazione è da zero.
 
Renat: Sfortunatamente, questo non è possibile per mantenere la compatibilità con altre lingue dove la numerazione è da zero.

Cosa vi impedisce di scrivere un identificatore neutro come primo membro di un'enumerazione predefinita? Per esempio:

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

Sia la "numerazione da zero" sarà conservata, e le variabili non inizializzate possono essere facilmente valutate.

 
Yedelkin:

Cosa vi impedisce di scrivere un identificatore neutro come primo membro di un'enumerazione predefinita? Per esempio:

E se pensate agli altri che stanno già usando l'insieme originale degli enum? Per non parlare dello sguardo perplesso di tutto il complesso di server.

In generale, la domanda non è posta correttamente. Lo sviluppatore non dovrebbe essere pigro e costringere il resto del mondo ad adattarsi a se stesso autodistruggendosi proprio quel mondo.

 
Renat: E se pensate agli altri che stanno già usando il set originale di enum?

Beh, pensiamo di nuovo "al resto". A cosa servono gli identificatori di costanti con nome? - Corretto, per poter utilizzare questi identificatori. Inoltre, per usare questi identificatori, non è necessario sapere quali valori specifici sono assegnati ai membri dell'enumerazione. O supponi che i programmatori competenti usino gli identificatori invece di scoprire i valori predefiniti dei membri di enum, e poi facciano controlli basati su questi valori predefiniti?

Renat : Per non parlare della vista perplessa dell'intero complesso di server.

Cioè, non è difficile implementare il suggerimento stesso, vero?

Renat : In realtà questa domanda è posta male. Lo sviluppatore non dovrebbe essere pigro e costringere il resto del mondo ad adattarsi a se stesso con l'autodistruzione di questo stesso mondo.

L'autore di questo thread non intendeva distruggere i mondi degli altri con la sua pigrizia. Ha fatto solo un suggerimento specifico per migliorare. E ha spiegato che il valore zero risulta essere sovraccarico.

 

Vorrei introdurre almeno una classe come ambito per gli elementi con nome 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 }; //ошибка
};

Motivazione per le classi: devi trovare un nome unico che potrebbe inaspettatamente entrare in conflitto con i nomi delle librerie (anche di terze parti) e/o predefiniti. Inoltre, potreste usare nomi simili di elementi enum SL, TP, PRICE, ecc. in diverse classi simultaneamente senza paura di conflitti.

Motivazione delle funzioni: non critiche, ma allo stesso tempo

 
A100:

Vorremmo introdurre un ambito per gli elementi con nome enum

Motivazione per le classi: devi trovare un nome unico che potrebbe inaspettatamente entrare in conflitto con una libreria e/o un nome predefinito. Inoltre, potreste usare nomi simili per gli elementi enum SL, TP, PRICE, ecc. in diverse classi allo stesso tempo senza paura di conflitti.

Motivazione delle funzioni: non critiche, ma allo stesso tempo

E questo in C++?
 
sergeev:
Ma com'è in C++?

Ecco da dove vengono le gambe - un paradosso, ma solo ora (quando ci sono le restrizioni), ho cominciato a capire perché tutto è stato fatto lì :)

Naturalmente, potreste farne a meno - scrivere un nome unico per tutte le classi, ma per programmi di grandi dimensioni, e specialmente per librerie destinate all'uso generale - non è un'opzione

 
A100: Vorrei che gli enum predefiniti della forma ENUM_XXX effettivamente equivalente a RadioButton siano numerati 1, mentre ora sono numerati per default, cioè 0. La domanda non riguarda la modifica dei default, ma invece di ...

Provate questo (per "inizializzazione"):

WRONG_VALUE.

Una costante può essere implicitamente lanciata a qualsiasi tipo di enum.

-1