比特菲尔德,标志数为参数

BitField with number of flags as parameter

本文关键字:参数 标志 菲尔德      更新时间:2023-10-16

假设我想创建一个具有二进制标志的类BitField和一个定义其中有多少个标志的构造函数:BitField bitField(500)。创建这样的班级的最佳方法是什么?如果我可以在偏移量上阅读并设置标志并在Bitfield getState(int index) const;上进行位置操作,那将很酷。谢谢!

如果您要求bitset,则可以参考STL的实现。

这是我的建议(不包括实现本身):

#include <limits.h>
template<unsigned int SIZE>
class BitField
{
public: //Constructors + Destructor
    BitField();
    virtual ~BitField();
    //-----------------------------------------------------------------------------
public: //Assignment Operators
    virtual const BitField& operator=(const BitField& bitField);
    virtual const BitField& operator|=(const BitField& bitField);
    virtual const BitField& operator&=(const BitField& bitField);
    virtual const BitField& operator^=(const BitField& bitField);
    virtual const BitField& operator<<=(unsigned int shift);
    virtual const BitField& operator>>=(unsigned int shift);
    //-----------------------------------------------------------------------------
public: //Unary Operators
    virtual BitField operator~() const;
    //-----------------------------------------------------------------------------
public: //Binary Operators
    friend BitField operator|(const BitField& bitField1,const BitField& bitField2);
    friend BitField operator&(const BitField& bitField1,const BitField& bitField2);
    friend BitField operator^(const BitField& bitField1,const BitField& bitField2);
    virtual BitField operator<<(unsigned int shift) const;
    virtual BitField operator>>(unsigned int shift) const;
    //-----------------------------------------------------------------------------
public: //Binary Comperators
    friend bool operator==(const BitField& bitField1,const BitField& bitField2);
    //-----------------------------------------------------------------------------
protected:
    unsigned char m_flags[(SIZE-1)/CHAR_BIT+1];
};

注意:使用BitField<500> bitField而不是BitField bitField(500)

实现对象