2009-08-13 9 views
17

tribool mi colpisce come uno degli angoli più strani di Boost. Vedo come ha alcune comodità rispetto all'utilizzo di enum, ma un enum può anche essere facilmente espansa rappresentano più di 3 stati.Hai usato boost :: tribool nel lavoro reale?

In quali modi reali avete usato il tribool?

risposta

17

Anche se non ho usato C++, e quindi boost, ho usato variabili a tre stati in modo estensivo in un'applicazione di rete in cui ho bisogno di memorizzare lo stato come vero/falso/in sospeso.

+3

Sì, le situazioni di asincronia generale o di polling sembrano essere naturali per il tribool. – Duck

+0

Ma l'applicazione ha utilizzato la stessa logica di 'boost :: tribool'? Cioè '(bool) triValue' è' true' iff 'triValue == true'; 'triVal1 == triVal2' è' indeterminato' se uno qualsiasi dei valori è 'indeterminato' ecc.? Senza le operazioni logiche 'tribool' sembra inutile in quanto è facile sostituirlo con un enum. – Ruslan

1

Ci sono diversi esempi del mondo reale su Google Code Search here.

+2

404. Ecco perché le risposte di solo collegamento sono fortemente scoraggiate su SO e sull'intera rete SE. – Ruslan

15

Uno stato aggiuntivo in qualsiasi tipo di valore può essere estremamente prezioso. Evita l'uso di "numeri magici" o di flag extra per determinare se il valore di una variabile è "forse" o "sconosciuto".

Invece di true o false, lo stato di una tribool è true, false o indeterminate.

Supponiamo di avere un database che contiene un elenco di customers e il loro dateOfBirth. Così si scrive una funzione lungo le linee di:

tribool IsCustomerAdult(customerName); 

la funzione ritorna:

`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). 

Molto utile.

+1

Lanciare un'eccezione se il cliente non è stato trovato, ma posso vedere come il tri-stato sia utile in quest'ultimo. – GManNickG

+7

per questo scenario, 'boost :: opzionale' è anche un'opzione. – rafak

+2

Wow, non l'avevo notato ... 'opzionale ' e 'tribool' più o meno mappano lo stesso concetto (" false, true, o qualcos'altro interamente ") anche se la loro semantica è molto diversa. E ora mi chiedo che cosa sia un '' facoltativo per ... –

3

Sono un grande fan della libreria Boost e ho iniziato a utilizzarlo in azienda che ho lasciato. Dopo aver esposto e utilizzato la libreria boost in modo esteso nel corso del nostro progetto, mi sono imbattuto in Tribool e stavo considerando l'utilizzo di alcuni algoritmi "Fuzzy Logic" che necessitavano di miglioramenti.

Sono partito prima che avessi la possibilità di entrare, ma al di là dell'esempio "Fuzzy Logic", altri moduli nel sistema avevano componenti con questo tipo di stato che, considerando ora, probabilmente finirei a usare il tribool in una quantità decente di codice se fossi ancora in compagnia.

-bn

5

Ho visto numerosi esempi di due booleani in uso per rappresentare tre stati possibili, esplicitamente o meno, con il quarto stato di essere in silenzio presume essere impossibile. In almeno due casi, ho modificato tali costruzioni per utilizzare tribool da quando abbiamo iniziato a usare boost.

+0

Anche se l'utilizzo di bool potrebbe sono stati inappropriati fin dall'inizio e dal momento che l'app era matura, ero certo che le condizioni (specifiche, ecc.) non sarebbero cambiate in 4 o 5 stati. Buon caso d'uso – Duck

1

penso che è molto utile per lo stampaggio Lingua quali applicazioni OCR e la sintesi vocale, perché come sapete lingue umane sono ambigue e hanno un sacco di Intermedio stati

cercando prefazione a migliorare le tecnologie attuali che utilizzano il tribool

9

Penso che il vantaggio extra non sia solo il 3 ° valore, ma anche che si possa facilmente utilizzare la logica a 3 valori!

Ad esempio:

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

SQL implementa tale logica.

+0

Wow, ho semplicemente riassunto qualsiasi confronto che coinvolge 'null' decaduto in' null', ma alla ricerca di questo (per SQL), hai ragione: 'null OR true == true'. Sbalordire. –

Problemi correlati