欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

二进制标志 - MetaTrader 5 库

author emer | 481 人阅读 | 0 人评论 |

您可以使用二进制标志来最小化函数签名中的 bool 参数。

例如,MQL int 大小为 32 位,因此您可以将 32 1/0 参数打包到单个 int 标志变量中。

空白功能(布尔值标志1,布尔值标志2,布尔值标志3,布尔值标志4,布尔值标志5,布尔值标志6,布尔值标志7,布尔值标志8,...标志N);

后:

空白功能(整数标志);

BinFlags 可以使用任何整数数据类型进行初始化:char、bool、short、int、color、long、datetime。

您的最大标志长度会有所不同:1 字节 = 8 位,2 字节 = 16 位,等等。

标志代表一个数字,该数字在任何位置都只有一个“1”位。

这些数字有1、2、4、8、16、32等。你明白了。

大量此类数字在十六进制中看起来更好:0x1、0x2、0x4、0x8、0x10、0x20 等。

这个类使用遵循规则的标志。

BinFlags 必须首先初始化。您可以稍后使用 Write 覆盖内部标志。

您可以检查、设置、重置任意数量的标志。

多个标志应以“|”分隔。

模板<类型名>班级BinFlags
  {民众:
                     BinFlags():mflags(无效的) {} BinFlags(T 标志):mflags(标志) {}
  空白              写(T 标志) {mflags=flags;}
   T                 Read() {返回mflags;}
  布尔值              Chk(T 标志) {返回(mflags&(flags))==flags;}
  空白              设置(T标志){mflags|=(标志);}
  空白              Rst(T 标志) {mflags&=~(flags);}
  细绳            格式();受保护的:
  整数               位() {整数我=0;为了(我;我<大小(T)*8;我+=4){如果(mflags<(整数战俘2,我)) {休息;}}返回(一)?一:1;}
   T                 mflags;
  };

为了方便起见,可以枚举标志名称。

BinFalgs 用法示例。

空白 启动时()
  {
   BinFlags<整数>bf(A|B);        //初始化并写入  /*操纵*/  打印(bf.Format());          //0011(2 个标志打开)  打印“一个:”,bf.Chk(A));        //答:真  打印“广告:”,bf.Chk(A|D));    //广告:假   bf.Set(C|D);                  //设置C和D  打印(bf.Format());          //1111(所有标志打开)   bf.Rst(A);                    //重置A  打印“BCD:”,bf.Chk(B|C|D));  //BCD码:真  打印(bf.Format());          //1110(降一旗)  }

输出:

/**
   BinFlags:0011
   答:正确
   广告:假
   BinFlags:1111
   BCD:真
   BinFlags:1110
/**/




附件下载

📎 binflags.mq5 (2.13 KB)

📎 binflags.mqh (1.94 KB)

Source: MQL5 #29480

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录