我一直在编写一个简单的类cFlags,它用于在单个变量中存储布尔标志,而不是创建多个布尔变量(所有布尔变量占用一个字节的内存)。一切工作正常,但是在尝试简化设置标志值时遇到了这个问题。 跳过不相关的部分,我的代码如下所示:
template <typename T>
cFlags
{
public:
bool get(char flag);
void set(char flag, bool value);
private:
T flags_;
};
创建的类包含模板类型的成员变量,并允许使用set()和get()方法管理其位(char参数对应于flags_成员中的特定位)。
现在,我想到了一个方法,我应该使operator []重载,以使设置和获取标志值更加容易。 问题是,我找不到像这样的东西
cFlags<char> flags;
flags[0] = true;
可能,因为operator []重载仅返回一个r值布尔值,该值对应于某个位是否点亮。 我应该如何实现这样的功能,例如我可以做的事情:
cFlags<char> flags;
flags[0] = true;
if (flags[0]) {
std::cout << "Bit 0 is active!";
}