C++枚举类型Enum及C++11强枚举类型用法

枚举常常和switch配合使用,用一个代码片段来说明:

    //W A S D 前、后、左、右行走\nQ E 左、右转头\nF 复位\nG H 暂停、继续、重播实例\nY 停止实例\nB 删除实例\nSPACE 删除所有实例
    enum Keydown{ Forward='w', Back='s', Left='a', Right='d', Lyaw='q', Ryaw='e',
        Reset = 'f', Pause = 'g', Continue = 'h', Stop = 'y', Delete = 'b', DeleteAll = 32
    }key;

    while (true){
        if (_kbhit()){//接受键盘回调
            key = Keydown(_getch());
            switch (key){
            case ('q') ://按q 朝左摆头
            {
                Rotate(-2.f);
                break;
            }
            case ('e') ://按e 朝右摆头
            {
                Rotate(2.f);
                break;
            }
            case ('w') ://按w 往前走
            {
                Move(0.f, 0.f, -0.1f);
                break;
            }
            case ('a') ://按a 朝左走
            {
                Move(-0.1f, 0.f, 0.f);
                break;
            }
            case('s') ://按s 往后走
            {
                Move(0.f, 0.f, 0.1f);
                break;
            }
            case('d') ://按d 朝右走
            {
                Move(0.1f, 0.f, 0.f);
                break;
            }
            case('f') ://按f 复位
            {
                SetPosition(0.f, 0.f, 1.f);
                SetOrientation(0.f, 0.f, -1.0, 0.f, 1.f, 0.f);
                break;
            }
            case('r') ://按r 转头
            {
                Rotate(180.f);
                break;
            }
            case(32) ://按space 销毁所有实例
            {
                DestoryAllInstance();
                break;
            }
            case('b') ://按b 销毁一个实例
            {
                DestoryInstance(pIns1);
                break;
            }
            case('g') ://按g 暂停
            {
                pIns1->Pause() ;
                break;
            }
            case('h') ://按h
            {
                pIns1->Continue();
                break;
            }
            case('y') ://按y 停止
            {
                pIns1->Stop();
                break;
            }
            default:
                continue;
            }
        }
    }

而C++11加入了强枚举类型

C++11之前,若是同一作用域下有两个不同的枚举类型,但含有相同的枚举常量也是不可的,比如:

enum EnumType1{Yang,Li};
enum EnumType2{Li,Zhang};

这样是不行的。

强枚举类型用class关键字来声明,如:

enum class Enumeration{
    E1=10
    E2=20
    E3,
    E4,
};

强类型枚举之所以能解决在不同枚举类下同枚举值名的问题,是因为在使用强枚举类型的枚举名时,必须指明所属范围,比如:Enum::E1,而单独的E1则不再具有意义。

猜你喜欢

转载自www.cnblogs.com/zeppelin5/p/10078516.html