A proposito, sembra esserci un errore nel preprocessore mql.
#define i ##nt ll;
si espande a 'i nt ll;' e dà un errore:
'i nt' - undeclared identifier t_t_t.mq4 50 1
Per quanto riguarda i commenti nell'enumerazione - in teoria, dovrebbero essere in tensione fino al preprocessore C. Quindi, anche se fosse possibile inserire un commento, sarebbe improbabile che abbia un effetto. In senso buono, dovete cambiare la sintassi (a _cmnt_, per esempio) e cambiare la sequenza di chiamata del preprocessore C con il preprocessore che tira i commenti. Le prospettive di tali riforme sono improbabili, credo ))
L'ultimo metodo richiede di scrivere manualmente gli spazi vuoti per enum e la funzione che restituisce un array di valori. Ho deciso di capirlo e di scriverlo in modo tale che non sia più necessario. Tuttavia, non può essere compilato in mql, non ci sono macro con numero variabile di argomenti, ma teoricamente possono apparire. Comunque, ecco quello che ho:
// Codice generato per emum1 // enum enum1{ // q = 1, // e = 3, // t = 65, // z = 90, // }; // unsigned get_enum1_array(int *ar){ // int temp[] = { q, e, t, z, }; // if(ar != NULL) // for(unsigned i = 0; i < sizeof(temp) / sizeof(int); ++i){ // ar[i] = temp[i]; } // return sizeof(temp) / sizeof(int); // }
Articolo su questo argomento http://jhnet.co.uk/articles/cpp_magic. Tutto sommato, un sacco di magia, naturalmente. Ma la tecnica può essere utile per una vasta gamma di compiti relativi alla generazione di codice preprocessore.
The C Pre-Processor (CPP) is the somewhat basic macro system used by the C programming language to implement features such as and which allow very simple text-substitutions to be carried out at compile time. In this article we abuse the humble to implement if-statements and iteration. Before we begin, a disclaimer: these tricks, while perfectly...
Tuttavia non può essere compilato in mql, non ci sono macro con numero variabile di argomenti, ma teoricamente possono apparire.
In MQL5 le macro non solo hanno un numero fisso di argomenti, ma il loro numero è limitato a 8. Così si può fare una enum per soli 3 valori.
Per quanto riguarda l'aspetto teorico, sarà probabilmente più veloce ottenere una funzione interna per l'analisi degli enum, dato che gli sviluppatori hanno già promesso di fare qualcosa.
In MQL5 le macro non solo hanno un numero fisso di argomenti, ma il loro numero è limitato a 8. Quindi possiamo fare una enum per soli 3 valori.
Per quanto riguarda l'aspetto teorico, è probabilmente più veloce ottenere una funzione interna per l'analisi degli enum. Gli sviluppatori hanno già promesso di fare qualcosa.
Non è previsto alcun iteratore per enumerare i valori di enum. Utilizza il metodo di enumerazione proposto in precedenza utilizzando l'array.
Ilyas: Nessun iteratore è previsto per l'enumerazione dei valori. Usate il metodo precedentemente suggerito per enumerare i valori usando un array.
Risulta essere lo stesso interruttore, ma di lato. Cioè, due liste dovranno essere mantenute in ogni caso: l'enumeratore stesso e l'array (casi di switch).
E i nomi normali che si trovano nei commenti?
A proposito, sembra esserci un errore nel preprocessore mql.
si espande a 'i nt ll;' e dà un errore:
'i nt' - undeclared identifier t_t_t.mq4 50 1
Per quanto riguarda i commenti nell'enumerazione - in teoria, dovrebbero essere in tensione fino al preprocessore C. Quindi, anche se fosse possibile inserire un commento, sarebbe improbabile che abbia un effetto. In senso buono, dovete cambiare la sintassi (a _cmnt_, per esempio) e cambiare la sequenza di chiamata del preprocessore C con il preprocessore che tira i commenti. Le prospettive di tali riforme sono improbabili, credo ))
A proposito, sembra esserci un errore nel preprocessore mql.
si espande a 'i nt ll;' e dà un errore:
Dynamic ENUM è per uso interno, la finestra delle impostazioni non li mostra. I nomi/commenti normali non sono realmente necessari
L'ultimo metodo richiede di scrivere manualmente gli spazi vuoti per enum e la funzione che restituisce un array di valori. Ho deciso di capirlo e di scriverlo in modo tale che non sia più necessario. Tuttavia, non può essere compilato in mql, non ci sono macro con numero variabile di argomenti, ma teoricamente possono apparire. Comunque, ecco quello che ho:
Выхлоп printf:
----enum1-----
1
3
65
90
----enum2-----
100
-3
21
----enum3-----
871
213
226
// Codice generato per emum1
// enum enum1{
// q = 1,
// e = 3,
// t = 65,
// z = 90,
// };
// unsigned get_enum1_array(int *ar){
// int temp[] = { q, e, t, z, };
// if(ar != NULL)
// for(unsigned i = 0; i < sizeof(temp) / sizeof(int); ++i){
// ar[i] = temp[i]; }
// return sizeof(temp) / sizeof(int);
// }
Articolo su questo argomento http://jhnet.co.uk/articles/cpp_magic. Tutto sommato, un sacco di magia, naturalmente. Ma la tecnica può essere utile per una vasta gamma di compiti relativi alla generazione di codice preprocessore.
Ho letto il thread con interesse, tutto molto cool con le macro.
Non è chiaro, perché abbiamo bisogno di tutto questo ballare con gli enum? Può fare un esempio pratico?
È chiaro su TF, ma cos'altro?
Tuttavia non può essere compilato in mql, non ci sono macro con numero variabile di argomenti, ma teoricamente possono apparire.
In MQL5 le macro non solo hanno un numero fisso di argomenti, ma il loro numero è limitato a 8. Così si può fare una enum per soli 3 valori.
Per quanto riguarda l'aspetto teorico, sarà probabilmente più veloce ottenere una funzione interna per l'analisi degli enum, dato che gli sviluppatori hanno già promesso di fare qualcosa.
In MQL5 le macro non solo hanno un numero fisso di argomenti, ma il loro numero è limitato a 8. Quindi possiamo fare una enum per soli 3 valori.
Per quanto riguarda l'aspetto teorico, è probabilmente più veloce ottenere una funzione interna per l'analisi degli enum. Gli sviluppatori hanno già promesso di fare qualcosa.
Utilizza il metodo di enumerazione proposto in precedenza utilizzando l'array.
Nessun iteratore è previsto per l'enumerazione dei valori.
Usate il metodo precedentemente suggerito per enumerare i valori usando un array.