|  | 
|      | 
|  | 
| TutorialBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 21. Boost.Tribool
  
   | |||||||||
| ![[Note]](/img/note.png) | 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)triboolx = 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);triboolx(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 ::
| реклама |