2009-08-13 20 views
17

トリブールはBoostの奇妙なコーナーの1つとして私を襲う。列挙型を使用するのに比べていくつかの便利さがあるのがわかりますが、列挙型は3つ以上の州を簡単に展開できます。実際の作業でboost :: triboolを使用しましたか?

どのような現実的な方法で使用するにはtriboolを入れましたか?

答えて

17

私はC++を使用していませんでしたので、私はstateをtrue/false/pendingとして保存する必要があるネットワークアプリケーションで3状態変数をかなり広範囲に使用しました。

+3

はい、一般的な非同期またはポーリングの状況は、triboolにとって当然のようです。 – Duck

+0

しかし、あなたのアプリケーションは 'boost :: tribool'と同じロジックを使いましたか?私。 'triValue == true'なら'(bool)triValue'は 'true'です。 'triVal1 == triVal2'は、いずれかの値が' indeterminate'なのか 'indeterminate'ですか?論理演算がなければ、 'tribool'はenumで置き換えるのが簡単なので役に立たないように見えます。 – Ruslan

1

Google Code Search hereにはいくつかの実例があります。

+2

404です。そのため、SOとSEネットワーク全体で、リンクのみの回答が強く推奨されていません。 – Ruslan

15

任意の値タイプの余分な状態は、非常に価値があります。変数の値が "maybe"か "unknown"かを判断するために、 "magic numbers"や余分なフラグの使用を避けます。代わりtrue又はfalse

は、triboolの状態はtruefalse、又はindeterminateあります。

customersとそのdateOfBirthのリストを含むデータベースがあるとします。だから、の線に沿って関数を書く:

tribool IsCustomerAdult(customerName); 

機能返します

`true` if the customer is 18 or older; 
`false` if the customer is less than 18; 
`indeterminate` if the customer is not in the database 
    (or the dateOfBirth value is not present). 

非常に便利です。

+1

顧客が見つからない場合は例外がスローされますが、後者ではトライステートがどのように役立つかがわかります。 – GManNickG

+7

このシナリオでは、 'boost :: optional'もオプションです。 – rafak

+2

うわー、それに気付かなかった... 'オプションの'と 'tribool'は、セマンティクスがかなり違っていても、同じ概念(「偽、真、または全く別のもの」)をマッピングします。そして今、私は 'optional 'が何のために使用されるのかと疑問に思っています。 –

3

私はBoostライブラリの大ファンで、私が残してくれた会社で使用し始めました。私たちのプロジェクトを通して、ブーストライブラリに広範に暴露され、使用された後、私はtriboolを見つけて、改善が必要ないくつかの "Fuzzy Logic"アルゴリズムの使用を検討していました。

私はそれに入る機会があった前に残しましたが、 "Fuzzy Logic"の例を越えて、システム内の他のモジュールには、この種の状態のコンポーネントがありました。これを考えると、おそらくtriboolを私がまだ会社にいればまともな量のコード。

-bn

5

Iは、第4の状態は、サイレント不可能であると仮定されると、明示的に、またはそうでなければ、3つの状態を表すために使用されている2つのブール値の多数の例を見てきました。少なくとも2つのケースでは、ブーストの使用を開始して以来、私はそのような構造をtriboolを使用するように変更しました。

+0

boolsの使用も可能ですアプリケーションが成熟して以来、私は条件(仕様など)が4,5州に変わることはないと確信していました。良いユースケース。 – Duck

1

私はあなたが知っているように、人間の言語があいまいであり、彼らは中間の多くはtriboolを使用して、現在の技術を向上させるために序文を探して

をステータス持っているので、それは、このようなOCRアプリケーションや音声合成などの言語の成形のために非常に有用であると思います

9

私は余分な利点は3番目の値だけでなく、3値のロジックを簡単に使うことができると思います!例えば

(true && indeterminate) == indeterminate 
(true || indeterminate) == true 

SQLは、このようなロジックを実装します。

+0

うわー、私は単純にヌルに崩壊した 'null'を含む比較を仮定していましたが、これを調べると(SQLの場合)、あなたは正しいです:' null OR true == true'です。心が吹かれました。 –

関連する問題