如何增加函数中传递的枚举?

问题描述 投票:1回答:1

我正在将枚举传递给函数。在此函数中,我想使用一些整数步来递增传递的枚举。我可能这样做,因为enum可以定义为整数。但是由于某些原因,以下操作无效。

这是我的相关代码:

enum THE_ENUM {
    S3,
    S4,
    S5,
    ...
};

double getPrice(THE_ENUM level) {
    switch (level) {
        case S3 : return mml[S3];
        case S4 : return mml[S4];
        case S5 : return mml[S5];
        ...
    }
    ...
}

int placeOrder(THE_ENUM tPL) {
    ...
    price = getPrice(S4);     // this works
    price = getPrice(tPL);    // this works
    price = getPrice(tPL+2);  // this doesn't!
    ...
}
...
placeOrder(S3);
...

我如何使用传递的枚举来访问下一个或上一个,如首次定义?

enums mql4
1个回答
0
投票

事实:MQL4不是已编译的C语言

枚举类型的数据属于某个有限的数据集。定义枚举类型:

enum name of enumerable type{list of values};

值列表是用逗号分隔的命名常量的标识符的列表。声明枚举后,将出现一个新的整数值4字节数据类型。新数据类型的声明允许编译器严格控制传递参数的类型,因为枚举引入了新的命名常量。在上面的示例中,一月命名常量的值为0,二月-1月,十二月-11。规则:如果未将某个值分配给作为枚举成员的命名常量,则其新值将自动形成。如果它是枚举的第一个成员,则将为其分配0值。对于所有后续成员,值将基于前一个成员的值加上一个来计算。示例:

enum intervals      // Enumeration of named constants
   {
    month      =  1, // Interval of one month       ---- code-assogned =  1
    two_months,      // Two months                  ---- auto-assigned  ~ 2
    quarter,         // Three months - a quarter    ---- auto-assigned  ~ 3
    halfyear   =  6, // Half a year                 ---- CODE-assigned =  6
    year       = 12, // Year - 12 months            ---- CODE-assigned = 12
    wild13,          //        13 months            ---- auto-assigned  ~13
    decade     =120  // Decade                      ---- CODE-assigned =120
   };

这意味着希望得到的,由编译器辅助的enum值“ arithmetics>]”(要求导航以调用即时求值/ << [getPrice(中解码的“ wild13之前的第二值”“ )是可能的,但不要指望它是含电池的低电量-MQL4语言架构师已经准备好可以吊起水果,他们已经优化了编译语言代码以提高效率和最小延迟。[人可以为MQL4-enum -s实现自己的算法,因为上面的价格水平double getPrice( smart_ENUM aLevelCONST )映射程序正在努力实现,但是使用超出其限制的受限语言开发这种设计的成本则由自己承担。考虑(不要忘记几年前的惊喜,当

string

-s不再是string -s时,突然之间,没有事先通知或事后通知,他们默默地变成了[[struct

-s-每个基金经理,交易员,支持团队成员或API维护人员都可以想象一下震惊和噩梦,一旦事情崩溃了,就没有机会理解为什么(string-> struct通知只是下一个MQL4 / MetaEditor帮助文件的发行版...耗费了太多精力,无数资金流失了,直到发现崩溃工厂的根本原因隐藏在该帮助文件的切向通知中,并且“更改”,将其重构为API重新设计的方式... 我们最好不要使自己面临类似无法控制的风险或者更不要对类似的“ d势力”在动静的沙滩上)至少,您已经收到警告[[:o)

注意:

与C ++不同,MQL4中枚举类型的内部表示的大小始终等于4个字节。也就是说,sizeof( months )返回值4。

    与C ++不同,不能在MQL4中声明匿名枚举。也就是说,必须始终在
  • [enum关键字之后指定唯一名称。
© www.soinside.com 2019 - 2024. All rights reserved.