我正在尝试在向量上实现bitset运算符<布尔>包装类。
我的问题是,当向量是int时,下标operator []的工作原理,但不是当它是bool时。
struct bitsetI {
vector<int> data;
bitset(int length) { data = vector<int>(length);}
int &operator[](const int index) { return data[index]; }
}
struct bitsetB {
vector<bool> data;
bitset(int length) { data = vector<bool>(length);}
bool &operator[](const int index) { return data[index]; }
}
使用bitsetI
bitsetI I(4);
I[0] = 1;
有效,但
bitsetB B(4);
B[0] = true;
将无法编译,给出“非const的引用的初始值必须是左值”错误。
我知道vector是vector的一个笨拙的特化(实现这个因为我需要能够在运行时声明bitstring长度,而不是像std :: bitset那样编译,而速度不是问题),但是不能找出问题在这里,如果有解决方法或者我应该只使用set函数。