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

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;
カテゴリー: C++ パーマリンク