existe alguma função "StringToEnum" ou uma alternativa?

 

Olá, se eu fizer:

string a = EnumToString(MODE_SMMA);

Eu recebo:

a ="MODE_SMMA"; recebo: "MODE_SMMA".

Agora, eu gostaria de alguma função que fizesse exatamente o contrário, quero dizer algo do tipo:

int b = StringToEnum("MODE_SMMA");

b = 2

onde 2 é o valor int associado à constante:"MODE_SMMA".


Cumprimentos, cyberglassed.

 
MODE_SMMA

já é o valor inteiro 2.

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert tem uma grande lista de funções de conversão em grupo.
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:

já é o valor inteiro 2.

O que você diz não se ajusta às minhas necessidades. Como você pode ler na minha pergunta, eu sei como converter de valor inteiro para string, mas o que eu quero fazer é exatamente o oposto:

com o código:

int b = StringToEnum("MODE_SMMA");

Eu quero obter o seguinte:

b = 2

 

Não há nenhum StringToEnum.

MODE_SMMA

já é o valor inteiro 2.

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



int b;

string StringToEnum="MODE_SMMA";

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

Print("b= ",b);



 
cyberglassed:

O que você diz não se ajusta às minhas necessidades. Como você pode ler na minha pergunta, eu sei como converter de valor enumeral para string, mas o que eu quero fazer é exatamente o oposto:

com o código:

int b = StringToEnum("MODE_SMMA");

Eu quero obter o seguinte:

b = 2

Você também perguntou se havia uma alternativa, o que Marco apontou.
 

obrigado, pessoal

 

obrigado Alain por seus conselhos, mas na verdade eu não tenho uma boa solução para meu problema,
portanto, tenho que dar algumas voltas estranhas.
Seria muito bom que o mql5 suporte dinamicamente a avaliação de código como a função eval(...) em PHP e Javascript,
então poderíamos carregar pequenos pedaços de códigos de arquivos externos (às vezes muito interessantes) e até mesmo implementar a função: StringToEnum facilmente como:

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

Em outras palavras, com o apoio da função eval(...) poderíamos resolver muitas coisas ao mesmo tempo.

Isso poderia ser um conselho muito interessante para a equipe de desenvolvedores do MT5.

Obrigado, Cyberglassed.
 
cyberglassed:

obrigado Alain por seus conselhos, mas na verdade eu não tenho uma boa solução para meu problema,
portanto, tenho que dar algumas voltas estranhas.
Seria muito bom que o mql5 suporte dinamicamente a avaliação de código como a função eval(...) em PHP e Javascript,
então poderíamos carregar pequenos pedaços de códigos de arquivos externos (às vezes muito interessantes) e até mesmo implementar a função: StringToEnum facilmente como:

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

Em outras palavras, com o apoio da função eval(...) poderíamos resolver muitas coisas ao mesmo tempo.

Isso poderia ser um conselho muito interessante para a equipe de desenvolvedores do MT5.

Obrigado, Cyberglassed.
A capacidade já existe na MQL de carregar bibliotecas externas (como DLLs) ou arquivos #incluídos específicos e fazer com que isso aconteça dessa forma. Como a MQL também é uma linguagem OOP, em teoria, você mesmo poderia escrever esse código de função, e apenas incluí-lo em seus programas nos quais você precisava dessa funcionalidade em particular. Ou dentro do código de sua EA, ou como um arquivo externo.
 
JD4:
A capacidade já existe na MQL de carregar bibliotecas externas (como DLLs) ou arquivos #incluídos específicos e fazer com que isso aconteça dessa forma. Como a MQL também é uma linguagem OOP, em teoria, você mesmo poderia escrever esse código de função, e apenas incluí-lo em seus programas nos quais você precisava dessa funcionalidade em particular. Ou dentro do código de sua EA, ou como um arquivo externo.

Obrigado JD4, mas infelizmente isso não resolve meus requisitos porque quando você carrega DLLs externas você passa alguns parâmetros e obtém um resultado baseado nesses parâmetros, tudo bem, mas lá você está programando em outra linguagem/ambiente/local e não exatamente em mql5. Eu programei DLLs personalizadas e carreguei-as em mql5 quando para mim não importa a linguagem que irá processar meus parâmetros, mas neste tópico eu queria que os dados fossem processados em mql5 para poder fazer uso (por exemplo) de variáveis locais e globais. Se você usar DLLs externas, aí você não conhecerá os valores das variáveis locais e globais, porque é como uma máquina de processamento externa. Então, se você tem uma função como eval(...) disponível em mql5 (neste momento não é o caso porque não está implementada), então você pode fazer uso de variáveis globais e locais, e até mesmo funções.

Razão: