![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
TutorialBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 21. Boost.Tribool
|
![]() |
Note |
---|---|
Some compilers may have troubles with evaluating tribool::operator safe_bool() at compile time. |
Пользователи могут вводить дополнительные ключевые слова для неопределенного значения в дополнение к предоставленной реализации<indeterminate
>с использованием макроса<BOOST_TRIBOOL_THIRD_STATE
>. Например, в следующей макроинстанциации (в глобальном масштабе) ключевое слово<maybe
>будет синонимом<indeterminate
>(также находящегося в пространстве имен<boost
>):
BOOST_TRIBOOL_THIRD_STATE
(maybe)tribool
x = maybe; if (maybe(x)) { /* ... */ }
<tribool
>объекты могут считываться и записываться в потоки путем включения заголовка<boost/logic/tribool_io.hpp
>способом, очень похожим на<bool
>значения. Когда флаг<boolalpha
>не установлен на потоке ввода/вывода, интегральные значения 0, 1, и 2 соответствуют<tribool
>значениям<false
>,<true
>и<indeterminate
>соответственно. Когда<boolalpha
>устанавливается на поток, произвольные строки могут использоваться для представления трех значений, причем по умолчанию они являются «ложными», «истинными» и «неопределенными». Например:
tribool
x;
cin >> x; // Type "0", "1", or "2" to get false, true, or indeterminate
cout << boolalpha << x; // Produces "false", "true", or "indeterminate"
<tribool
>вход и выход чувствительны к текущей локации потока. Струны, связанные с ложными и истинными значениями, содержатся в стандартной<std::numpunct
>грани, а струна, именующая неопределенный тип, содержится в<indeterminate_name
>грани. Чтобы заменить название неопределенного состояния, вам нужно пропитать свой поток локальным, содержащим<indeterminate_name
>грань, например:
BOOST_TRIBOOL_THIRD_STATE
(maybe) locale global; locale test_locale(global, newindeterminate_name
<char>("maybe")); cout.imbue(test_locale);tribool
x(maybe); cout << boolalpha << x << endl; // Prints "maybe"
Если реализация стандартной библиотеки C++ не поддерживает локализации,<tribool
>ввод/вывод все равно будет работать, но вы не сможете настроить строки, напечатанные/спаренные при установке<boolalpha
>.
Статья Tutorial раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 21. Boost.Tribool может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 21. Boost.Tribool ::
реклама |