Die Bibliothek Boost.Tribool bietet mit boost::logic::tribool
einen Typ an, der bool
ähnelt. Während bool
zwischen zwei Status unterscheidet, kennt boost::logic::tribool
jedoch drei.
Um boost::logic::tribool
verwenden zu können, müssen Sie die Headerdatei boost/logic/tribool.hpp
einbinden.
boost::logic::tribool
#include <boost/logic/tribool.hpp>
#include <iostream>
using namespace boost::logic;
int main()
{
tribool b;
std::cout << std::boolalpha << b << '\n';
b = true;
b = false;
b = indeterminate;
if (b)
;
else if (!b)
;
else
std::cout << "indeterminate\n";
}
Eine Variable vom Typ boost::logic::tribool
kann auf true
, false
und indeterminate
gesetzt werden. Der Standardkonstruktur initialisiert die Variable mit false
. So gibt Beispiel 27.1 zuerst false
auf die Standardausgabe aus.
Die if
-Kontrollstruktur im Beispiel 27.1 zeigt Ihnen, wie b richtig abgefragt wird. Sie müssen explizit auf true
und false
überprüfen. Ist wie im Beispiel die Variable auf indeterminate
gesetzt, wird der else
-Block ausgeführt.
Boost.Tribool bietet auch eine Funktion boost::logic::indeterminate()
an. Wenn Sie dieser Funktion eine Variable vom Typ boost::logic::tribool
übergeben, die auf indeterminate
gesetzt ist, wird true
zurückgegeben. Ist die Variable auf true
oder false
gesetzt, wird false
zurückgegeben.
boost::logic::tribool
#include <boost/logic/tribool.hpp>
#include <boost/logic/tribool_io.hpp>
#include <iostream>
using namespace boost::logic;
int main()
{
std::cout.setf(std::ios::boolalpha);
tribool b1 = true;
std::cout << (b1 || indeterminate) << '\n';
std::cout << (b1 && indeterminate) << '\n';
tribool b2 = false;
std::cout << (b2 || indeterminate) << '\n';
std::cout << (b2 && indeterminate) << '\n';
tribool b3 = indeterminate;
std::cout << (b3 || b3) << '\n';
std::cout << (b3 && b3) << '\n';
}
So wie auf Variablen vom Typ bool
können auch auf Variablen vom Typ boost::logic::tribool
logische Operatoren angewandt werden. Genaugenommen ist dies die einzige Möglichkeit, mit Variablen vom Typ boost::logic::tribool
zu arbeiten. Die Klasse bietet keine Methoden an.
Wenn Sie Beispiel 27.2 ausführen, sehen Sie, dass für b1 || indeterminate
true
, für b2 && indeterminate
false
und für alle anderen Fälle indeterminate
zurückgegeben wird. Wenn Sie sich die Operationen und ihre Ergebnisse im Detail ansehen, stellen Sie fest, dass sich boost::logic::tribool
so verhält, wie man es intuitiv erwarten würde. Sie finden in der Dokumentation von Boost.Tribool jedoch auch Tabellen, die anzeigen, welche Verknüpfungen mit welchen Operatoren zu welchen Ergebnissen führen.
Beispiel 27.2 zeigt auch, wie für Variablen vom Typ boost::logic::tribool
true
, false
oder indeterminate
auf die Standardausgabe ausgegeben wird. Dazu muss die Headerdatei boost/logic/tribool_io.hpp
eingebunden und das Flag std::ios::boolalpha für die Standardausgabe gesetzt werden.
Boost.Tribool bietet außerdem ein Makro BOOST_TRIBOOL_THIRD_STATE
an, mit dem ein anderer Wert als indeterminate
verwendet werden kann. So könnte zum Beispiel dontknow
anstatt indeterminate
geschrieben werden.