【问题标题】:Enum trick in C++/CLIC++/CLI 中的枚举技巧
【发布时间】:2010-12-14 16:35:19
【问题描述】:

在原生 C++ 中,我们可以在类定义中使用枚举技巧:

namespace EFoo
{
  enum { a = 10; };
}

class Foo
{
   // Declare an array of 10 integers.
   int m_Arr[EFoo::a];  
};

但是,在 C++/CLI 中使用托管枚举,

public enum class EFoo
{
  a = 10,
};

EFoo::a 无法隐式转换为 int, 所以不允许使用枚举技巧。

有什么解决办法吗?

谢谢。

【问题讨论】:

    标签: arrays enums c++-cli


    【解决方案1】:

    如果你只是想实现'enum hack',你不应该在任何最近的编译器中这样做,因为它们将支持static const 成员声明。

    class Foo
    {
    private:
        static const int ARRAY_SIZE = 10;
        int m_arr[ARRAY_SIZE];
    };
    

    否则,像 Jonathan Wood 回答的那样进行int 演员阵容将有助于从托管的enum 更改为int

    【讨论】:

      【解决方案2】:

      试试:

      arr[(int)EFoo.a];
      

      【讨论】:

      • 从来没有想过编译器在类定义中接受强制转换。
      • 好吧,你没有强制转换类或类定义。您只是在投射枚举值。
      【解决方案3】:

      如果您不需要封装,为什么不将其声明为“枚举”而不是“枚举类”?然后,您可以在没有演员表的情况下使用它,也可以在没有类名的情况下使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 2011-03-15
        • 2011-12-08
        • 1970-01-01
        相关资源
        最近更新 更多