是否有一些 "StringToEnum "的函数或替代方法?

 

你好,如果我这样做

string a = EnumToString(MODE_SMMA);

我得到

a ="MODE_SMMA"

现在,我想用一些函数 来做相反的事情,我的意思是像这样。

int b =StringToEnum("MODE_SMMA")。

b = 2

其中2是与常量"MODE_SMMA"相关的int值。


问候,cyberged。

 
MODE_SMMA

已经是整数值2。

Print(IntegerToString(MODE_SMMA));
 
https://www.mql5.com/en/docs/convert 有一个很大的转换功能组列表。
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:

已经是整数值2了。

你所说的并不符合我的需求。你可以从我的问题中读到,我知道如何将枚举值转换为字符串,但我想做的恰恰相反。

用代码。

int b =StringToEnum("MODE_SMMA")。

我想得到以下结果。

b = 2

 

没有StringToEnum。

MODE_SMMA

已经是整数值2。

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



int b;

string StringToEnum="MODE_SMMA";

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

Print("b= ",b);



 
cyberglassed:

你所说的并不符合我的需求。你可以从我的问题中读到,我知道如何将枚举值转换为字符串,但我想做的恰恰相反。

用代码。

int b =StringToEnum("MODE_SMMA")。

我想得到以下结果。

b = 2

你还问是否有替代方案,Marco指出了这一点。
 

谢谢你们

 
 
Alain Verleyen:
仍然在等待StringToEnum 函数的有效用例。)

感谢Alain的建议,但实际上我还没有一个很好的解决方案来解决我的问题。
所以我不得不采取一些奇怪的变通方法。
如果mql5支持动态的代码评估,就像PHPJavascript 中的eval(...) 函数一样,那就真的太好了。
那么我们就可以从外部文件中加载小段的代码(有时非常有趣),甚至可以实现函数。StringToEnum 容易实现。

intStringToEnum(string enumId) {
eval("return " + enumId + ";")。
}

换句话说,在eval(...) 函数的支持下,我们可以同时解决很多事情。

这可能是对MT5开发团队的一个非常有趣的建议。

谢谢你,Cyberglassed。
 
cyberglassed:

感谢Alain的建议,但实际上我还没有一个好的解决方案。
所以我不得不采取一些奇怪的变通方法。
如果mql5支持动态的代码评估,就像PHPJavascript 中的eval(...) 函数一样,那就真的太好了。
那么我们就可以从外部文件中加载小段的代码(有时非常有趣),甚至实现函数。StringToEnum 容易实现。

intStringToEnum(string enumId) {
eval("return " + enumId + ";")。
}

换句话说,在eval(...) 函数的支持下,我们可以同时解决很多事情。

这可能是对MT5开发团队的一个非常有趣的建议。

谢谢你,Cyberglassed。
MQL已经有能力加载外部库(如DLLs)或特定的#include文件,并以这种方式发生。 由于MQL也是一种OOP语言,在理论上,你可以自己编写该功能 代码,并将其包含在你需要特定功能的程序中。 无论是在你的EA代码中,还是作为一个外部文件。
 
JD4:
MQL已经有能力加载外部库(如DLL)或特定的#include文件,并以这种方式发生。 由于MQL也是一种OOP语言,在理论上,你可以自己编写该功能代码,并将其包含在你需要特定功能的程序中。 无论是在你的EA代码中,还是作为一个外部文件。

谢谢你,JD4,但不幸的是,这并不能解决我的要求,因为当你加载外部DLLs时,你传递给它一些参数,并根据这些参数得到一个结果,这是好的,但你是在其他语言/环境/地方编程,而不是完全在mql5中。我编程了自定义DLLs并将其加载到mql5中,对我来说,处理参数的语言并不重要,但在这个线程中,我希望数据在mql5中被处理,这样我就可以使用(例如)局部和全局变量了。如果你使用外部DLLs,你将不知道局部和全局变量的值,因为它就像一个外部处理机。然后,如果你在mql5中有一个像eval(...) 这样的函数(现在不是这样,因为没有实现),那么你就可以使用全局和局部变量,甚至是函数。