C++/CLI 中的枚举技巧

发布于 2024-10-07 06:30:26 字数 345 浏览 2 评论 0原文

在本机 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, 所以枚举技巧是不允许的。

有什么解决方法吗?

谢谢。

In native C++ we could use enum trick in class definition:

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

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

However, with managed enum in C++/CLI,

public enum class EFoo
{
  a = 10,
};

EFoo::a couldn't be converted implicitly to int,
so the enum trick wouldn't be allowed.

Is there any workaround?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

可是我不能没有你 2024-10-14 06:30:26

如果您只是想实现“enum hack”,则不必在任何最新的编译器中执行此操作,因为它们将支持 static const 成员声明。

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

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

If you are just trying to achieve the 'enum hack', you should not have to do that in any recent compiler, as they will support static const member declarations.

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

Otherwise, doing an int cast like Jonathan Wood answered would work to change from a managed enum to an int.

ぇ气 2024-10-14 06:30:26

尝试:

arr[(int)EFoo.a];

Try:

arr[(int)EFoo.a];
无尽的现实 2024-10-14 06:30:26

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

If you dont need the enacpsulation, why not declare it as an "enum" instead of the "enum class"? You can then use it without the cast, and also, without the classname .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文