[C++] 試しにデクリメント付きの bool 型を実装してみる

VC++2010 の bool 値の動きが、false -> true -> true なのだから、それに合わせてデクリメントを作ってみる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 を入れてしまえば良いわけです。

■結果

1
2
3
4
// デクリメントが可能なbool値
BOOL bl = false;
cout << ++bl << endl;
cout << --bl << endl;
カテゴリー: C++ パーマリンク