トリブールはBoostの奇妙なコーナーの1つとして私を襲う。列挙型を使用するのに比べていくつかの便利さがあるのがわかりますが、列挙型は3つ以上の州を簡単に展開できます。実際の作業でboost :: triboolを使用しましたか?
どのような現実的な方法で使用するにはtriboolを入れましたか?
トリブールはBoostの奇妙なコーナーの1つとして私を襲う。列挙型を使用するのに比べていくつかの便利さがあるのがわかりますが、列挙型は3つ以上の州を簡単に展開できます。実際の作業でboost :: triboolを使用しましたか?
どのような現実的な方法で使用するにはtriboolを入れましたか?
私はC++を使用していませんでしたので、私はstateをtrue/false/pendingとして保存する必要があるネットワークアプリケーションで3状態変数をかなり広範囲に使用しました。
任意の値タイプの余分な状態は、非常に価値があります。変数の値が "maybe"か "unknown"かを判断するために、 "magic numbers"や余分なフラグの使用を避けます。代わりtrue
又はfalse
の
は、tribool
の状態はtrue
、false
、又は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).
非常に便利です。
私はBoostライブラリの大ファンで、私が残してくれた会社で使用し始めました。私たちのプロジェクトを通して、ブーストライブラリに広範に暴露され、使用された後、私はtriboolを見つけて、改善が必要ないくつかの "Fuzzy Logic"アルゴリズムの使用を検討していました。
私はそれに入る機会があった前に残しましたが、 "Fuzzy Logic"の例を越えて、システム内の他のモジュールには、この種の状態のコンポーネントがありました。これを考えると、おそらくtriboolを私がまだ会社にいればまともな量のコード。
-bn
Iは、第4の状態は、サイレント不可能であると仮定されると、明示的に、またはそうでなければ、3つの状態を表すために使用されている2つのブール値の多数の例を見てきました。少なくとも2つのケースでは、ブーストの使用を開始して以来、私はそのような構造をtriboolを使用するように変更しました。
boolsの使用も可能ですアプリケーションが成熟して以来、私は条件(仕様など)が4,5州に変わることはないと確信していました。良いユースケース。 – Duck
私はあなたが知っているように、人間の言語があいまいであり、彼らは中間の多くはtriboolを使用して、現在の技術を向上させるために序文を探して
をステータス持っているので、それは、このようなOCRアプリケーションや音声合成などの言語の成形のために非常に有用であると思います
私は余分な利点は3番目の値だけでなく、3値のロジックを簡単に使うことができると思います!例えば
:
(true && indeterminate) == indeterminate
(true || indeterminate) == true
SQLは、このようなロジックを実装します。
うわー、私は単純にヌルに崩壊した 'null'を含む比較を仮定していましたが、これを調べると(SQLの場合)、あなたは正しいです:' null OR true == true'です。心が吹かれました。 –
はい、一般的な非同期またはポーリングの状況は、triboolにとって当然のようです。 – Duck
しかし、あなたのアプリケーションは 'boost :: tribool'と同じロジックを使いましたか?私。 'triValue == true'なら'(bool)triValue'は 'true'です。 'triVal1 == triVal2'は、いずれかの値が' indeterminate'なのか 'indeterminate'ですか?論理演算がなければ、 'tribool'はenumで置き換えるのが簡単なので役に立たないように見えます。 – Ruslan