VC++2010 の bool 値の動きが、false -> true -> true なのだから、それに合わせてデクリメントを作ってみる。
class BOOL
{
bool _b ; // 内部でブール値を持つwww
public:
BOOL( bool b = false ) {
_b = b;
}
// bool型へキャスト
operator bool() {
return _b ;
}
// bool型から代入
BOOL& operator =( bool b ) {
_b = b;
return *this;
}
// 前置インクリメント
BOOL& operator ++() {
_b = true;
return *this;
}
// 後置インクリメント
BOOL operator ++(int) {
BOOL b; b._b = _b;
_b = true;
return b;
}
// 前置デクリメント
BOOL& operator --() {
_b = false;
return *this;
}
// 後置デクリメント
BOOL operator --(int) {
BOOL b; b._b = _b;
_b = false;
return b;
}
};
内部的に、bool 値を持っているのは GAG というかなんというか、意外と詰まらないコードになってしまいました。
最初は b |= 1; b &= 0; なことをやるつもりだったのですが、実は 0/1 しか値を取らないのだから、直接 false/ture を入れてしまえば良いわけです。
■結果
// デクリメントが可能なbool値 BOOL bl = false; cout << ++bl << endl; cout << --bl << endl;
