从匿名结构访问枚举条目

时间:2017-05-15 22:01:01

标签: c++ gcc struct enums enumeration

我有这样的代码:

struct
{
    enum
    {
        entry,
    } en;

} data;

void foo()
{
    switch(data.en)
    {
    }
}

给了我一个警告:

main.cpp:13:11: warning: enumeration value 'entry' not handled in switch [-Wswitch]

     switch(data.en)

这是预料之中的。我很好奇,如果我可以添加case entry:而不使我的结构名为one(这显然有用)。

此:

struct
{
    enum
    {
        entry,
    } en;

} data;

void foo()
{
    switch(data.en)
    {
        case entry:
        break;
    }
}

给出错误+警告:

main.cpp: In function 'void foo()':

main.cpp:15:14: error: 'entry' was not declared in this scope

         case entry:

              ^~~~~

main.cpp:13:11: warning: enumeration value 'entry' not handled in switch [-Wswitch]

     switch(data.en)

           ^

2 个答案:

答案 0 :(得分:3)

可以写:

case decltype(data.en)::entry:
然而,我认为它不会被认为是好的代码。

答案 1 :(得分:1)

在C中你可以通过以下方式实现

#include <stdio.h>

struct
{
    enum
    {
        entry,
    } en;

} data = { entry };

void foo()
{
    switch ( data.en )
    {
        case entry:
            puts( "Hello, World!" );
            break;
    }
}

int main( void )
{
    foo();
}

在C ++中,您可以通过以下方式执行此操作

#include <iostream>

struct
{
    enum
    {
        entry,
    } en;

} data = { decltype( data.en )::entry };

void foo()
{
    switch ( data.en )
    {
        case data.entry:
            std::cout <<  "Hello, World!" << std::endl;
            break;
    }
}

int main()
{
    foo();
}