在我正在重写其内部的 C++ 库中,有一些无符号整数变量,我想将它们转换为枚举类型:
enum InitType {
INIT,
NON_INIT
};
我有一个这种类型的变量:
InitType InitVar;
这个库是从另一个代码部分调用的,该部分的变量是普通整数:
uint32_t UnsignedIntVar;
我希望将来自调用者的无符号版本分配给库内部枚举:
InitVar = UnsignedIntVar;
但编译器不喜欢这样:
error: invalid conversion from 'uint32_t' to 'InitType'
如何以最简洁的方式进行此转换?
以下是我提出的一些想法:
如果enum
只有两个值,我可以这样做:
InitVar = UnsignedIntVar ? Init : NonInit;
每次我想做这样的任务,都需要写很多文字。
如果有更多的值,我可以创建一个翻译表:
InitType Uint2InitTypeConv = {INIT_0, INIT_1, INIT_2...};
INIT_x
只是枚举的名称。然后我可以使用表格进行翻译:
InitVar = Uint2InitTypeConv[UnsignedIntVar];
这看起来很简洁。不过,我认为我应该能够为此重载operator=
,但我似乎做不对。那将轻松地封装我所能想到的任何其他丑陋的事情。
static_cast
。 - ascheplerenum ESomething { A = 1, B = 2 }; ESomething e;
总的来说,你只需要小心谨慎。 - Kerrek SBenum
就是为了未定义的行为而生的。对于新手来说,完全没有检查的情况非常令人惊讶,但即使是专家也会被它捕捉到。 - Matthieu M.