2009-08-13 13 views
17

tribool me parece una de las esquinas más extrañas de Boost. Veo que tiene algunas comodidades en comparación con el uso de una enumeración, pero una enumeración también se puede expandir fácilmente para representar más de 3 estados.¿Has usado boost :: tribool en el trabajo real?

¿En qué formas del mundo real ha utilizado tribool?

Respuesta

17

Si bien no he usado C++, y por lo tanto impulso, he usado variables de tres estados bastante extensamente en una aplicación de red donde necesito almacenar el estado como verdadero/falso/pendiente.

+3

Sí, las situaciones generales de asincronía o de votación parecen ser un ajuste natural para tribool. – Duck

+0

¿Pero tu aplicación usa la misma lógica que 'boost :: tribool'? Es decir. '(bool) triValue' es' true' iff 'triValue == true'; 'triVal1 == triVal2' es' indeterminado' si alguno de los valores es 'indeterminado', etc. Sin las operaciones lógicas 'tribool' parece inútil ya que es fácil sustituirlo por una enumeración. – Ruslan

1

Hay varios ejemplos del mundo real en Google Code Search here.

+2

404. Es por eso que las respuestas de solo enlace se desaconsejan en SO y toda la red SE. – Ruslan

15

Un estado adicional en cualquier tipo de valor puede ser extremadamente valioso. Evita el uso de "números mágicos" o indicadores adicionales para determinar si el valor de una variable es "tal vez" o "desconocido".

En lugar de true o false, el estado de un tribool es true, false o indeterminate.

Digamos que tiene una base de datos que contiene una lista de customers y su dateOfBirth. Así se escribe una función a lo largo de las líneas de:

tribool IsCustomerAdult(customerName); 

La función retorna:

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

Muy útil.

+1

Lanzaría una excepción si no se encontrara al cliente, pero puedo ver cómo el tri-estado es útil en este último. – GManNickG

+7

para este escenario, 'boost :: optional' también es una opción. – rafak

+2

Wow, no lo había notado ... 'opcional ' y 'tribool' más o menos mapean el mismo concepto (" falso, verdadero o algo completamente diferente ") aunque su semántica es bastante diferente. Y ahora me pregunto qué 'opcional 'se utilizará para ... –

3

Soy un gran admirador de la biblioteca de Boost y comencé a usarla en la empresa a la que he dejado desde entonces. Después de exponernos a la biblioteca de impulso y utilizarla exhaustivamente durante todo el proyecto, tropecé con tribool y estaba considerando utilizar algunos algoritmos de "lógica difusa" que necesitan mejoras.

Me fui antes de tener la oportunidad de entrar en él, pero más allá del ejemplo de "Fuzzy Logic", otros módulos en el sistema tenían componentes con este tipo de estado que considerando ahora, probablemente terminaría usando tribool en una cantidad decente de código si todavía estuviera con la compañía.

-BN

5

que he visto numerosos ejemplos de dos booleanos que se utilizan para representar los tres estados posibles, explícitamente o no, con el cuarto estado que se supone en silencio a ser imposible. En al menos dos casos, he cambiado esas construcciones para usar tribool desde que empezamos a usar boost.

+0

Yo también aunque el uso de bools podría han sido inapropiados para empezar y dado que la aplicación era madura, estaba seguro de que las condiciones (especificaciones, etc.) no iban a cambiar a 4 o 5 estados. Buen caso de uso. – Duck

1

Creo que es muy útil para el moldeo de idiomas tales como aplicaciones de OCR y síntesis de voz, porque como saben los lenguajes humanos son ambiguos y tienen una gran cantidad de Intermedio estados de

buscando prólogo para mejorar las tecnologías actuales utilizando el tribool

9

¡Creo que el beneficio extra no es solo el 3er valor, sino también que puede usar fácilmente la lógica de 3 valores!

Por ejemplo:

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

SQL implementa tal lógica.

+0

Wow, simplemente había sugerido cualquier comparación que involucra 'null' decayed a' null', pero al investigar esto (para SQL), tienes razón: 'null OR true == true'. Mente soplada –

Cuestiones relacionadas