在我正在重写内部的C库中,我有一些无符号整数变量,我想转换为枚举:
enum InitType { INIT,NON_INIT };
InitType Initvar;
uint32_t UnsignedIntvar;
我想将从调用者传递的无符号版本分配给库内部枚举:
Initvar = UnsignedIntvar;
但编译器不喜欢这样:
error: invalid conversion from 'uint32_t' to 'InitType'
执行此转换的最简洁方法是什么?
以下是我的一些想法:
如果枚举只有两个值,我可以这样做:
Initvar = UnsignedIntvar ? Init : NonInit;
这是我想做这样一个任务的时候写的很多东西.
如果它有更多值,我可以创建一个转换表:
InitType Uint2InitTypeConv = {INIT_0,INIT_1,INIT_2...};
其中INIT_x只是枚举的名称.然后我可以使用表格进行翻译:
Initvar = Uint2InitTypeConv[UnsignedIntvar];
这看起来很干净.但是,我认为我应该能够为此重载operator =,但我似乎无法做到这一点.这很容易包含我能提出的任何其他丑陋.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。