boolean
about boolean
boolean は true, false に加え null の状態を持つ三態 bool (3-state bool) です。operator ||, operator && に関しては処理のショートカットができるようにオーバーロードしていませんので必要に応じて |, & をご利用ください。
動作確認済みコンパイラ
このモジュールは以下のコンパイラでコンパイル疎通し BOOLEAN_WITH_EXCEPTION 指定なしの状態で各 161 点、BOOLEAN_WITH_EXCEPTION 指定ありの状態で各 163 点のテストをパスしていることを確認しています。
- Borland C++ 5.2
- Borland C++ 5.5.1
- Borland C++ 5.6.4
- Borland C++ 5.9
- Microsoft Visual C++ 6
- Microsoft Visual C++ 7.1
- Microsoft Visual C++ 8
- Metrowerks C/C++ Compiler 2.4
- Metrowerks C/C++ Compiler 3.0.1
- Digital Mars C++ 8.25
- Digital Mars C++ 8.49
- Intel C/C++ Compiler 7.1
- Open Watcom C/C++ 1.5
- g++ 3.4.4
使用方法
下のリンクから boolean.h をダウンロードして、boolean を使用したいモジュール内で boolean.h をインクルードするだけです。
ダウンロード
使用例
#include "boolean.h"
void f() {
// ++ や < など本来数値型に対する operator に対応していない以外は
// 基本的に bool とほぼ等価にご利用いただけます。
boolean X; // null で初期化。
boolean Y(false) // false で初期化。
boolean Z(true) // true で初期化。
...
if (X) {
// X が true の時の処理...
} else if (!X) {
// X が false の時の処理...
} else {
// X が null の時の処理...
}
...
X = boolean(); // null の代入。
Y = false; // false の代入。
Z = true; // true の代入。
...
if (X.is_null()) {
// X が null の時の処理...
}
if (Y.is_not_null()) {
// Y が null でない時の処理...
}
...
if (boolean_is_null(X)) {
// X が null の時の処理...
}
if (boolean_is_not_null(Y)) {
// Y が null でない時の処理...
}
}
#define BOOLEAN_WITH_EXCEPTION // 「boolean が null の状態で評価されると例外を送出」させる指定。
#include "boolean.h"
void f() {
boolean X;
...
try {
if (X) {
// X が true の時の処理...
} else {
// X が false の時の処理...
}
} catch(const boolean *) {
// boolean が null の状態で bool 評価された時の処理...
}
}
リファレンス
boolean 真理値表
operator bool ()
| false or exception※ | false | true |
※BOOLEAN_WITH_EXCEPTIONマクロが定義されている場合は例外が送出され、そうでなければ false 値として評価されます。
NOT
AND
| null | null | null |
| null | false | false |
| null | false | true |
OR
| null | null | null |
| null | false | true |
| null | true | true |
XOR
| null | null | null |
| null | false | true |
| null | true | false |
operator ==
| null | null | null |
| null | true | false |
| null | false | true |
operator !=
| null | null | null |
| null | false | true |
| null | true | false |
.is_null(), nullable_bool_is_null(A)
.is_not_null(), nullable_bool_is_not_null(A)
.is_false(), nullable_bool_is_false(A)
.is_not_false(), nullable_bool_is_not_false(A)
.is_true(), nullable_bool_is_true(A)
.is_not_true(), nullable_bool_is_not_true(A)
macro
| BOOLEAN_H | 自動定義 | boolean.h の重複インクルード対策の為に使用されています。 |
| TRICKLIB_BOOLEAN_NAMESPACE | 自動定義/ユーザ定義 | nullable_bool の名前空間名を指定します。省略時は tricklib として自動定義されます。 |
| BOOLEAN_WITH_EXCEPTION | 自動定義/ユーザ定義 | このマクロが定義されている場合、null 値が bool 評価されると例外を送出します。TRICKLIB_BOOLEAN_EXCEPTION_OBJECT マクロが定義されいるとこのマクロは自動定義されます。 |
| TRICKLIB_BOOLEAN_EXCEPTION_OBJECT | 自動定義/ユーザ定義 | null 値が bool 評価された場合に送出する例外オブジェクトを指定します。BOOLEAN_WITH_EXCEPTION マクロが定義されているとこのマクロは例外クラス evaluate_null とともに自動定義されます。 |
2008-05-27 以下の修正を行いました。