这是我想要做的:
typedef enum { ONE, TWO, THREE } Numbers;
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个函数来执行类似于以下的切换案例:
char num_str[10];
int process_numbers_str(Numbers num) {
switch(num) {
case ONE:
case TWO:
case THREE:
{
strcpy(num_str, num); //some way to get the symbolic constant name in here?
} break;
default:
return 0; //no match
return 1;
}
Run Code Online (Sandbox Code Playgroud)
而不是在每种情况下定义,有没有办法使用枚举变量设置它,就像我在上面尝试做的那样?
有没有投一个通用的方法int,以enum在C++?
如果int落在一个范围内enum它应该返回一个enum值,否则抛出一个exception.有没有办法一般地写它?不止一个enum type应予以支持.
背景:我有一个外部枚举类型,无法控制源代码.我想将此值存储在数据库中并检索它.
说,我们有
enum E
{
Foo = 0,
Bar = 1
};
Run Code Online (Sandbox Code Playgroud)
现在,我们做到了
enum E v = ( enum E ) 2;
Run Code Online (Sandbox Code Playgroud)
然后
switch ( v )
{
case Foo:
doFoo();
break;
case Bar:
doBar();
break;
default:
// Is the compiler required to honor this?
doOther();
break;
}
Run Code Online (Sandbox Code Playgroud)
由于上面的开关处理枚举的每个可能列出的值,是否允许编译器优化掉default上面的分支,或者在enum的值不在列表中的情况下具有未指定或未定义的行为?
正如我期望C和C++的行为应该类似,问题在于两种语言.但是,如果在这种情况下C和C++之间存在差异,那么了解它也会很好.
让我们I成为一个整体类型.现在假设我有一个enum class my_enum_class : I,可能不连续的值.现在我得到了一些I价值.如何检查它是否是枚举的值my_enum_class?
对类似问题的答案(对于C语言)假设值是连续的,并且可以添加"虚拟"上限值,并检查0和该值之间的范围; 这与我的情况无关.还有另一种方法吗?
我有一些枚举课
enum class Foo { A=1, B=18 , Z=42 };
Run Code Online (Sandbox Code Playgroud)
我想检查是否可以将某个整数转换为a Foo.这样做的理想方式是什么?这是用于运行时检查(在编译时尚不知道整数)
显然我可以用这种方式做到这一点(编写一个bool CheckEnum(Foo);带有大屁股开关的函数,除了默认情况下,所有情况都返回true),但我希望有一个更优雅的机制,避免这么多的写作.MPL或Boost.Preprocessor将是一个完全可以接受的解决方案,但其中一个我遗憾地知道很少
或者另一种表达方式的方法是:编译器是否可以假设一个实例enum只能保存声明为基于该假设而保持和优化的值?
enum MyType { A = 1, B = 2 };
const MyType C = static_cast<MyType>(3);
void fun(MyType m) {
switch (m) {
case A:
// ...
break;
case B:
// ...
break;
case C:
// can this be optimized away?
}
}
Run Code Online (Sandbox Code Playgroud)