Boost.CompressedPair stellt mit boost::compressed_pair
eine Klasse zur Verfügung, die sich wie std::pair
verhält. Ist einer oder sind beide Template-Parameter leere Klassen, benötigt boost::compressed_pair
jedoch weniger Speicherplatz. Hierbei kommt eine Optimierung zum Einsatz, die auf Englisch empty base class optimization heißt.
Um boost::compressed_pair
verwenden zu können, müssen Sie die Headerdatei boost/compressed_pair.hpp
einbinden.
boost::compressed_pair
#include <boost/compressed_pair.hpp>
#include <utility>
#include <iostream>
struct empty {};
int main()
{
std::pair<int, empty> p;
std::cout << sizeof(p) << '\n';
boost::compressed_pair<int, empty> cp;
std::cout << sizeof(cp) << '\n';
}
Wenn Sie Beispiel 28.1 ausführen, wird Ihnen für cp eine geringere Speichergröße ausgegeben als für p. Mit Visual C++ 2013 erstellt und auf einem 64-Bit Windows 7-System ausgeführt gibt das Beispielprogramm für sizeof(cp)
4
und für sizeof(p)
8
aus.
Beachten Sie, dass es einen weiteren großen Unterschied zwischen std::pair
und boost::compressed_pair
gibt: Während Sie bei std::pair
über zwei Eigenschaften first und second auf gespeicherte Werte zugreifen, rufen Sie bei boost::compressed_pair
zwei Methoden first()
und second()
auf.