c'è qualche funzione "StringToEnum" o un'alternativa?

 

Ciao, se lo faccio

stringa a = EnumToString(MODE_SMMA);

ottengo:

a ="MODE_SMMA"

Ora, vorrei una funzione che faccia esattamente il contrario, voglio dire qualcosa come

int b = StringToEnum("MODE_SMMA");

b = 2

dove 2 è il valore int associato alla costante:"MODE_SMMA"


Saluti, cyberglassed.

 
MODE_SMMA

è già il valore intero 2.

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert ha un grande gruppo di funzioni di conversione.
Documentation on MQL5: Conversion Functions
Documentation on MQL5: Conversion Functions
  • www.mql5.com
Conversion Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

è già il valore intero 2.

Quello che dici non si adatta alle mie esigenze. Come puoi leggere nella mia domanda, so come convertire da valore enum a stringa, ma quello che voglio fare è proprio il contrario:

con il codice:

int b = StringToEnum("MODE_SMMA");

Voglio ottenere quanto segue:

b = 2

 

Non c'è nessun StringToEnum.

MODE_SMMA

è già il valore intero 2.

   int b=MODE_SMMA;
   Print("b= ",b);



int b;

string StringToEnum="MODE_SMMA";

if(StringToEnum=="MODE_SMMA"){b=2;}

Print("b= ",b);



 
cyberglassed:

Quello che dici non si adatta alle mie esigenze. Come puoi leggere nella mia domanda, so come convertire da valore enum a stringa, ma quello che voglio fare è proprio il contrario:

con il codice:

int b = StringToEnum("MODE_SMMA");

Voglio ottenere quanto segue:

b = 2

Hai anche chiesto se c'era un'alternativa, che Marco ha indicato.
 

grazie ragazzi

 

Grazie Alain per i tuoi consigli, ma in realtà non ho una buona soluzione per il mio problema,
quindi devo prendere qualche strana soluzione.
Sarebbe davvero bello che mql5 supporti dinamicamente la valutazione del codice come la funzione eval(...) in PHP e Javascript,
allora potremmo caricare piccoli pezzi di codice da file esterni (a volte molto interessanti) e anche implementare la funzione StringToEnum facilmente come:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

In altre parole, con il supporto della funzione eval(...) potremmo risolvere molte cose allo stesso tempo.

Questo potrebbe essere un consiglio molto interessante per il team di sviluppatori di MT5.

Grazie, Cyberglassed.
 
cyberglassed:

Grazie Alain per i tuoi consigli, ma in realtà non ho una buona soluzione per il mio problema,
quindi devo prendere qualche strana soluzione.
Sarebbe davvero bello che mql5 supporti dinamicamente la valutazione del codice come la funzione eval(...) in PHP e Javascript,
allora potremmo caricare piccoli pezzi di codice da file esterni (a volte molto interessanti) e anche implementare la funzione StringToEnum facilmente come:

int StringToEnum(string enumId) {
eval("return " + enumId + ";");
}

In altre parole, con il supporto della funzione eval(...) potremmo risolvere molte cose allo stesso tempo.

Questo potrebbe essere un consiglio molto interessante per il team di sviluppatori di MT5.

Grazie, Cyberglassed.
In MQL c'è già la possibilità di caricare librerie esterne (come DLL) o file #include specifici e fare in modo che ciò avvenga in questo modo. Poiché MQL è anche un linguaggio OOP, in teoria, si potrebbe scrivere il codice di quella funzione da soli, e semplicemente includerlo nei programmi in cui si ha bisogno di quella particolare funzionalità. Sia all'interno del codice del proprio EA, sia come file esterno.
 
JD4:
In MQL c'è già la possibilità di caricare librerie esterne (come DLL) o file #include specifici e fare in modo che ciò avvenga in questo modo. Poiché MQL è anche un linguaggio OOP, in teoria, si potrebbe scrivere il codice di quella funzione da soli, e semplicemente includerlo nei programmi in cui si ha bisogno di quella particolare funzionalità. Sia all'interno del codice del proprio EA, sia come file esterno.

Grazie JD4, ma purtroppo questo non risolve le mie esigenze perché quando carichi DLL esterne gli passi dei parametri e ottieni un risultato basato su quei parametri, va bene, ma lì stai programmando in un altro linguaggio/ambiente/luogo e non esattamente in mql5. Ho programmato DLL personalizzate e le ho caricate in mql5 quando per me non ha importanza il linguaggio che elaborerà i miei parametri, ma in questo thread volevo che i dati fossero elaborati in mql5 così posso fare uso (per esempio) di variabili locali e globali. Se si usano DLL esterne, lì non si conoscono i valori delle variabili locali e globali, perché è come una macchina di elaborazione esterna. Poi, se hai una funzione come eval(...) disponibile in mql5 (al momento non è il caso perché non implementata) allora puoi fare uso di variabili globali e locali, e anche di funzioni.

Motivazione: