将一个枚举映射到另一个枚举
Map one enum to another enum
有一个现有的枚举
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;
还是有更好的方法?
我无法想象你为什么需要这样做......如果你不需要重命名枚举的值,你可以只创建第一个变量的另一个变量,而不添加另一个枚举(我相信这不是你的情况,但仍然必须指出这个机会(:
typedef enum
{
myEnum_front = 11,
myEnum_back = 19
} myEnumSides, new_myEnumSides;//<-- just add the new variable here
如果你确实想重命名它(我相信,是你的情况(,你不应该使用 ::
运算符,而应该简单地写:
typedef enum
{
myEnum_front = 11,
myEnum_back = 19
} myEnumSides;
typedef enum
{
new_myEnum_front = myEnum_front,
new_myEnum_back = myEnum_back
} new_myEnumSides;
仅当枚举位于类、结构或命名空间内时,才应使用 ::
运算符,否则不需要::
。
我可以想象您想要这样做的唯一原因是扩展现有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
编辑 根据您的评论,您可以通过将值保留在专门供外部使用的标头中来向客户公开枚举。
通常情况下,您不想公开第三方库的详细信息,但那里的枚举可能具有您需要的确切成员。
在这种情况下,为第三方enum
创建映射是有益的,这样即使后端库发生变化,您也可以自己提供枚举器。
最简洁的方法是创建一个别名:
using MyEnum = ThirdPartyEnum;
// {
// enumerator1,
// enumerator2
// }
这样,用户代码就不会依赖于第三方内部结构,您可以避免进行转换,即使替换了第三方库,您的用户也可以通过简单地取消注释枚举器值来继续使用MyEnum
(我喜欢将它们保留在注释中,因此用户不必参考第三方库以获取文档。
相关文章:
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- std::映射键作为模板化结构与枚举成员
- 如何使用枚举将字符值映射到 int
- 编译结构的时枚举映射
- 有效的双向作用域枚举映射
- 映射枚举值为C 中的模板参数
- 使用 C++11 可变参数模板初始化枚举到字符串映射
- 将枚举值映射到 C++ 中的类型
- 将C++枚举映射为常量字符*
- 在类中映射命名空间枚举
- 将一个枚举映射到另一个枚举
- 定义基于模板的映射指针,以便在验证范围时将 int 解析为枚举
- 在C++中如何将运行时类型鉴别器映射到模板实例(无需手动枚举所有实例)
- 枚举映射对重构具有鲁棒性
- 在模板专门化中映射枚举
- 使用C++中的函数指针映射枚举键和值
- 映射/联接两个自动生成的枚举的最佳方式
- 将存储在多映射中的私有枚举作为值读取
- 将字符串和枚举映射到模板化类型
- c++中的枚举映射