C++/CLI 中的枚举技巧
在本机 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果您只是想实现“
enum
hack”,则不必在任何最新的编译器中执行此操作,因为它们将支持static const
成员声明。否则,像 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 supportstatic const
member declarations.Otherwise, doing an
int
cast like Jonathan Wood answered would work to change from a managedenum
to anint
.尝试:
Try:
如果您不需要封装,为什么不将其声明为“枚举”而不是“枚举类”?然后,您可以在没有强制转换的情况下使用它,也可以在没有 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 .