ラップする場合はint
、次のようにすることができます。
class bitval {
int &val;
unsigned int mask;
public:
bitval(int &i, int idx) : val(i), mask(((unsigned int)(INT_MAX) + 1) >> idx) {}
bitval &operator=(int i) {
if (i) {
val |= mask;
} else {
val &= ~mask;
}
return *this;
}
operator bool() const {
return val & mask;
}
};
class bit {
int &val;
public:
bit(int &i) : val(i) {}
bitval operator[](int idx) { return bitval(val, idx); }
};
次に、構文は次のようになります。
int z = 0x1234;
bit(z)[0] = 1;
uint8_t b = bit(z)[30];
ところで、C++ プログラマーは通常、最上位ビットではなく、最下位ビットをビット 0 と呼ぶため、混乱が少なくなる可能性があります。mask(1 << idx)