将一个枚举映射到另一个枚举

时间:2012-09-05 12:24:29

标签: c++ enums

有一个现有的枚举

typedef enum
{
    myEnum_front = 11,
    myEnum_back = 19
} myEnumSides;

我想创建另一个枚举new_myEnumSides,并且它的值应该映射到myEnumSides的值。因此我将使用new_myEnumSides而不是myEnumSides。 以下代码是否可以用于此目的?

typedef enum
{
    new_myEnum_front = myEnumSides::myEnum_front,
    new_myEnum_back = myEnumSides::myEnum_back
} new_myEnumSides;

或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我无法想象为什么你需要这样做...如果你不需要重命名 enum的值,你可以做另一个第一个变量,没有添加另一个枚举(我相信这不是你的情况,但仍然需要指出这个机会):

typedef enum
{
    myEnum_front = 11,
    myEnum_back = 19
} myEnumSides, new_myEnumSides;//<-- just add the new variable here

如果你想要重命名它(我相信 你的情况),你应该使用{{1}运算符,但只需写:

::

仅当枚举位于类,结构或命名空间内时,才应使用typedef enum { myEnum_front = 11, myEnum_back = 19 } myEnumSides; typedef enum { new_myEnum_front = myEnum_front, new_myEnum_back = myEnum_back } new_myEnumSides; 运算符,否则不需要::

答案 1 :(得分:0)

我可以想象你想要这样做的唯一原因是扩展现有的enum并创建一个带有额外值的新的。

由于enum不提供任何形式的继承,编译时常量和实际上只是整数,你可以做这样的事情,虽然我不特别推荐它。

// internalEnums.h
myEnum_front = 11,
myEnum_back = 19

// customerEnums.h
someNewValue = 20,
someOtherNewValue = 21

// Wherever you want to define your enums
typedef enum
{
  #include "customerEnums.h"
} customerAccessible;

typedef enum
{
  #include "internalEnums.h"
  #include "customerEnums.h"
} internalUseOnly;

// Now there are two enumerations, sharing items.
customerAccessible::someNewValue // 11
customerAccessible::myEnum_front; // Doesn't exist

编辑根据您的评论,您可以通过在标头中保留值专门供外部使用来向客户公开枚举。