Die Boost C++ Bibliotheken

Kapitel 28. Boost.CompressedPair

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.

Beispiel 28.1. Weniger Speicherbedarf bei 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.