TrickLibrary
  1. http://tricklib.com/
  2. cxx/
  3. ex/
  4. boolean/

boolean

about boolean

boolean は true, false に加え null の状態を持つ三態 bool (3-state bool) です。operator ||, operator && に関しては処理のショートカットができるようにオーバーロードしていませんので必要に応じて |, & をご利用ください。

Wraith the Trickster

2008-05-27 以下の修正を行いました。

動作確認済みコンパイラ

このモジュールは以下のコンパイラでコンパイル疎通し BOOLEAN_WITH_EXCEPTION 指定なしの状態で各 161 点、BOOLEAN_WITH_EXCEPTION 指定ありの状態で各 163 点のテストをパスしていることを確認しています。

使用方法

下のリンクから 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 ()

Anullfalsetrue
static_cast<bool>Afalse or exception※falsetrue
※BOOLEAN_WITH_EXCEPTIONマクロが定義されている場合は例外が送出され、そうでなければ false 値として評価されます。

NOT

Anullfalsetrue
NOT Anulltruefalse

AND

nullfalsetrue
nullnullnullnull
falsenullfalsefalse
truenullfalsetrue

OR

nullfalsetrue
nullnullnullnull
falsenullfalsetrue
truenulltruetrue

XOR

nullfalsetrue
nullnullnullnull
falsenullfalsetrue
truenulltruefalse

operator ==

nullfalsetrue
nullnullnullnull
falsenulltruefalse
truenullfalsetrue

operator !=

nullfalsetrue
nullnullnullnull
falsenullfalsetrue
truenulltruefalse

.is_null(), nullable_bool_is_null(A)

Anullfalsetrue
A.is_null(), nullable_bool_is_null(A)truefalsefalse

.is_not_null(), nullable_bool_is_not_null(A)

Anullfalsetrue
A.is_not_null(), nullable_bool_is_not_null(A)falsetruetrue

.is_false(), nullable_bool_is_false(A)

Anullfalsetrue
A.is_false(), nullable_bool_is_false(A)falsetruefalse

.is_not_false(), nullable_bool_is_not_false(A)

Anullfalsetrue
A.is_not_false(), nullable_bool_is_not_false(A)truefalsetrue

.is_true(), nullable_bool_is_true(A)

Anullfalsetrue
A.is_true(), nullable_bool_is_true(A)falsefalsetrue

.is_not_true(), nullable_bool_is_not_true(A)

Anullfalsetrue
A.is_not_true(), nullable_bool_is_not_true(A)truetruefalse

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 とともに自動定義されます。