位掩码枚举值的替代解决方案

时间:2021-07-23 07:02:50

标签: c++ data-structures enums bit-manipulation bitmask

全部

由于位掩码枚举值限制(“版本”和“硬件”可以容纳的最大项目数为 32), 我想改变“硬件”的数据结构。在当前代码中,“Hardwares”类型是存储硬件值的组合(QFlags:https://doc.qt.io/qt-5/qflags.html),它有像^=,|=这样的运算符和用于位掩码操作的函数testFlag()。是否有任何数据结构(类型)可以轻松完成相同的事情?谢谢。

QT C++ 代码:

enum Version
 {
     undefine     = 0x00000000,  //change to 0,1,2,3
     xxxxx400     = 0x00000001,                   
     xxxxx401     = 0x00000002,                   
     xxxxx410     = 0x00000004,                   

 }; Q_DECLARE_FLAGS(Versions, Version)


enum Hardware
{
    Undefined  = 0x00000000,            //change to 0,1,2,3
    H1         = 0x00000001,
    H2         = 0x00000002,
    H3         = 0x00000004,
}; Q_DECLARE_FLAGS(Hardwares, Hardware)

struct Settings 
{
    Version          verNum ;
    Hardwares        supportedHW ;          
} ;

const Settings gSettings[] =
{                                    
      {   xxxxx400,         H1|H2|H3  },
      {   xxxxx401,         H1|H3     },
} ;

if(Hardwares.testFlag(hardware) 

versions ^= gSettings[i].verNum;

Versions |= gSettings[i].verNum;

0 个答案:

没有答案
相关问题