Ответ 1
Хотя я не использовал С++ и, следовательно, увеличил, я довольно широко использовал переменные трех состояний в сетевом приложении, где мне нужно сохранить состояние как true/false/pending.
tribool поражает меня как один из самых странных уголков Boost. Я вижу, как у него есть удобства по сравнению с использованием перечисления, но перечисление также может быть легко расширено, представляя более трех состояний.
В каких реальных мирах вы использовали трибулу?
Хотя я не использовал С++ и, следовательно, увеличил, я довольно широко использовал переменные трех состояний в сетевом приложении, где мне нужно сохранить состояние как true/false/pending.
Дополнительное состояние в любом типе значений может быть чрезвычайно ценным. Это позволяет избежать использования "магических чисел" или дополнительных флагов, чтобы определить, является ли значение переменной "возможно" или "неизвестно".
Вместо true
или false
состояние a 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).
Очень полезно.
Я думаю, что дополнительная выгода - это не только третье значение, но и то, что вы можете легко использовать 3-значную логику!
Например:
(true && indeterminate) == indeterminate
(true || indeterminate) == true
SQL реализует такую логику.
Я видел многочисленные примеры двух булевых элементов, которые используются для представления трех возможных состояний, явно или иначе, при этом четвертое состояние считается молчаливым. По крайней мере в двух случаях я изменил такие конструкции, чтобы использовать tribool, так как мы начали использовать boost.
Я большой поклонник библиотеки Boost и начал использовать ее в компании, с которой я с тех пор ушел. После того, как я стал активно использовать библиотеку boost в нашем проекте, я наткнулся на tribool и рассматривал возможность использования для некоторых алгоритмов "Fuzzy Logic", нуждающихся в улучшениях.
Я ушел, прежде чем у меня появилась возможность войти в него, но, помимо примера "Fuzzy Logic", другие модули в системе имели компоненты с таким видом состояния, которое сейчас рассматривается, я, вероятно, в конечном итоге использовал бы tribool в приличный объем кода, если я все еще был в компании.
-bn
Я думаю, что это очень полезно для языкового формования, такого как приложения OCR и синтеза речи, потому что, как вы знаете, человеческие языки неоднозначны и у них много промежуточных статусов
поиск предисловия для улучшения существующих технологий с использованием tribool