2009-08-13 14 views
17

tribool uderza mnie jako jeden z najdziwniejszych zakątków Boost. Widzę, jak ma pewne udogodnienia w porównaniu do używania enum, ale enum może być łatwo rozszerzony reprezentują więcej niż 3 stany.Czy używałeś boost :: tribool w prawdziwej pracy?

W jaki sposób użyłeś tryboolu w świecie rzeczywistym?

Odpowiedz

17

Podczas gdy ja nie korzystałem z C++, a co za tym idzie doładowania, użyłem zmiennych trzech stanów dość szeroko w aplikacji sieciowej, w której muszę przechowywać stan jako true/false/pending.

+3

Tak, ogólne sytuacje asynchroniczne lub sondowania wydają się być naturalnym rozwiązaniem dla tribooli. – Duck

+0

Ale czy Twoja aplikacja używa tej samej logiki co 'boost :: tribool'? To znaczy. '(bool) triValue' to' prawda' iff 'triValue == true'; 'triVal1 == triVal2' to' nieokreślony' iff dowolna z wartości jest 'nieokreślona' itd.? Bez operacji logicznych 'tribool' wygląda bezużytecznie, ponieważ łatwo jest go zastąpić wyliczeniem. – Ruslan

1

Istnieje kilka przykładów rzeczywistego świata na Google Code Search here.

+2

404. Dlatego odpowiedzi typu "tylko link" są zdecydowanie odradzane w przypadku sieci SO i całej sieci SE. – Ruslan

15

Dodatkowy stan w dowolnym typie wartości może być niezwykle cenny. Pozwala uniknąć użycia "magicznych liczb" lub dodatkowych flag, aby określić, czy wartość zmiennej to "być może" czy "nieznana".

Zamiast true lub false, stan z tribool jest true, false lub indeterminate.

Załóżmy, że masz bazę danych zawierającą listę customers i ich dateOfBirth. Więc napisać funkcję wzdłuż linii:

tribool IsCustomerAdult(customerName); 

powraca funkcję:

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

bardzo przydatne.

+1

Wyrzuciłbym wyjątek, gdyby klient nie został znaleziony, ale widzę, jak tri-state jest użyteczny w tym ostatnim. – GManNickG

+7

w tym scenariuszu opcja 'boost :: optional' również jest opcją. – rafak

+2

Wow, nie zauważyłem tego ... 'opcjonalnie ' i 'tribool' mniej więcej odwzorowują tę samą koncepcję (" false, true, lub coś zupełnie innego "), chociaż ich semantyka jest zupełnie inna. A teraz zastanawiam się, co to jest "opcjonalne " do ... –

3

Jestem wielkim fanem biblioteki Boost i zacząłem jej używać w firmie, którą mam od lewej. Po intensywnym doświadczeniu i korzystaniu z biblioteki boost w trakcie całego projektu natknąłem się na tribool i rozważałem użycie dla niektórych algorytmów "Fuzzy Logic" wymagających ulepszeń.

Wyjechałem, zanim miałem okazję się do niego dostać, ale poza przykładem "Fuzzy Logic", inne moduły w systemie zawierały komponenty tego rodzaju między stanami, które rozważając teraz, prawdopodobnie skończyłoby się używaniem triboola w przyzwoitą ilość kodu, jeśli nadal byłem w firmie.

Bn

5

Widziałem liczne przykłady dwóch wartości logicznych są używane do reprezentowania trzy możliwe stany, wyraźnie lub w inny sposób, przy czym czwarty stan cicho Zakłada się niemożliwe. W co najmniej dwóch przypadkach zmieniłem takie konstrukcje, aby używać trybu tribool, ponieważ zaczęliśmy używać boostu.

+0

Ja też, chociaż używanie na początku były nieodpowiednie, a ponieważ aplikacja była dojrzała, byłem pewien, że warunki (specyfikacje itp.) nie zmienią się na 4 lub 5 stanów. Dobry przypadek użycia. – Duck

1

myślę, że jest bardzo przydatny do formowania języka takich jak aplikacje OCR i syntezy mowy, bo jak wiesz, ludzkie języki są niejednoznaczne i mają dużo Pośredniego Statusy

patrząc przedmowę do poprawy obecnych technologii z wykorzystaniem tribool

9

Myślę, że dodatkowa korzyść to nie tylko trzecia wartość, ale także, że można z łatwością korzystać z logiki 3-wartościowej!

Na przykład

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

SQL realizuje taką logikę.

+0

Wow, po prostu załatwiłem porównanie z 'null' zepsute do' null', ale na badania tego (dla SQL), masz rację: 'null OR true == true'. Umysł dmuchany. –

Powiązane problemy