Enums 枚举在MQL4/MQL5中是否可以有自己的方法。我可以将字符串作为值存储在枚举中吗?

Enums 枚举在MQL4/MQL5中是否可以有自己的方法。我可以将字符串作为值存储在枚举中吗?,enums,mql4,mql5,Enums,Mql4,Mql5,我正在尝试编写一段代码,希望将ENUM用作一个类,并对其调用一些方法。。例如toString()。或者我可以在Mql4/Mql5语言的枚举中存储字符串值吗?否枚举不能有方法。但是,您可以使用多态行为来模拟此所需属性 #property strict #property script_show_inputs #include <Object.mqh> //+-----------------------------------------------------------------

我正在尝试编写一段代码,希望将ENUM用作一个类,并对其调用一些方法。。例如toString()。或者我可以在Mql4/Mql5语言的枚举中存储字符串值吗?

否枚举不能有方法。但是,您可以使用多态行为来模拟此所需属性

#property strict
#property script_show_inputs
#include <Object.mqh>
//+------------------------------------------------------------------+
enum ENUM_STRAT {STRAT1, STRAT2};
//+------------------------------------------------------------------+
input ENUM_STRAT  inpStrategy=STRAT1;
//+------------------------------------------------------------------+
class StrategyBase : public CObject
{
   public: virtual string toString()=0;  
};
//+------------------------------------------------------------------+
class Strategy1 : public StrategyBase
{
   public: virtual string toString() override { return "Strategy #1"; }
};
//+------------------------------------------------------------------+
class Strategy2 : public StrategyBase
{
   public: virtual string toString() override { return "Strategy #2"; }
};
//+------------------------------------------------------------------+
StrategyBase* initStrategy()
{
   switch(inpStrategy)
   {
      case STRAT1:
         return new Strategy1();
      default:
         return new Strategy2();
   }
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   StrategyBase *strategy = initStrategy();
   printf("The result of the toString() method is %s", strategy.toString());
   delete strategy;
}
#属性严格
#属性脚本\u显示\u输入
#包括
//+------------------------------------------------------------------+
enum enum_STRAT{STRAT1,STRAT2};
//+------------------------------------------------------------------+
输入ENUM_STRAT inpStrategy=STRAT1;
//+------------------------------------------------------------------+
类策略库:公共CObject
{
public:虚拟字符串toString()=0;
};
//+------------------------------------------------------------------+
类别策略1:公共策略库
{
public:虚拟字符串toString()重写{return“Strategy#1”;}
};
//+------------------------------------------------------------------+
类别策略2:公共策略库
{
public:虚拟字符串toString()重写{return“Strategy#2”;}
};
//+------------------------------------------------------------------+
StrategyBase*initStrategy()
{
交换机(INP策略)
{
案例1:
返回新策略1();
违约:
返回新策略2();
}
}
//+------------------------------------------------------------------+
//|脚本程序启动函数|
//+------------------------------------------------------------------+
void OnStart()
{
StrategyBase*strategy=initStrategy();
printf(“toString()方法的结果是%s”,strategy.toString());
删除策略;
}

否枚举不能有方法。但是,您可以使用多态行为来模拟此所需属性

#property strict
#property script_show_inputs
#include <Object.mqh>
//+------------------------------------------------------------------+
enum ENUM_STRAT {STRAT1, STRAT2};
//+------------------------------------------------------------------+
input ENUM_STRAT  inpStrategy=STRAT1;
//+------------------------------------------------------------------+
class StrategyBase : public CObject
{
   public: virtual string toString()=0;  
};
//+------------------------------------------------------------------+
class Strategy1 : public StrategyBase
{
   public: virtual string toString() override { return "Strategy #1"; }
};
//+------------------------------------------------------------------+
class Strategy2 : public StrategyBase
{
   public: virtual string toString() override { return "Strategy #2"; }
};
//+------------------------------------------------------------------+
StrategyBase* initStrategy()
{
   switch(inpStrategy)
   {
      case STRAT1:
         return new Strategy1();
      default:
         return new Strategy2();
   }
}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   StrategyBase *strategy = initStrategy();
   printf("The result of the toString() method is %s", strategy.toString());
   delete strategy;
}
#属性严格
#属性脚本\u显示\u输入
#包括
//+------------------------------------------------------------------+
enum enum_STRAT{STRAT1,STRAT2};
//+------------------------------------------------------------------+
输入ENUM_STRAT inpStrategy=STRAT1;
//+------------------------------------------------------------------+
类策略库:公共CObject
{
public:虚拟字符串toString()=0;
};
//+------------------------------------------------------------------+
类别策略1:公共策略库
{
public:虚拟字符串toString()重写{return“Strategy#1”;}
};
//+------------------------------------------------------------------+
类别策略2:公共策略库
{
public:虚拟字符串toString()重写{return“Strategy#2”;}
};
//+------------------------------------------------------------------+
StrategyBase*initStrategy()
{
交换机(INP策略)
{
案例1:
返回新策略1();
违约:
返回新策略2();
}
}
//+------------------------------------------------------------------+
//|脚本程序启动函数|
//+------------------------------------------------------------------+
void OnStart()
{
StrategyBase*strategy=initStrategy();
printf(“toString()方法的结果是%s”,strategy.toString());
删除策略;
}

这似乎是不可能的。枚举值可以转换为
EnumToString((enum_YOUR_enum)enum_值)
,但这与拥有不可能的枚举项的私有成员不同。枚举值可以转换为
EnumToString((enum_YOUR_enum)enum_值)
,但这与拥有枚举的私有成员不同