有一个现有的枚举
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;
或者有更好的方法吗?
答案 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
编辑根据您的评论,您可以通过在标头中保留值专门供外部使用来向客户公开枚举。