Składnia
#include <boost/compressed_pair.hpp>
template < class T1, class T2 >
class compressed_pair;
Opis szczegółowy
Odpowiednik szablonu
std::pair umożliwiający zmniejszenie rozmiaru danych. W przypadku gdy optymalizacja rozmiaru pary nie jest możliwa to rozmiar pary utworzonej przy pomocy
boost::compressed_pair będzie taki sam jak dla
std::pair.
Aby odczytać bądź zmodyfikować wartości zapisane w obiekcie typu
boost::compressed_pair należy użyć metody first() lub metody second().
Zastosowanie
Korzyści z zastosowania szablonu
boost::compressed_pair uzyskuje się w sytuacji gdy parametrem szablonu pary jest funktor. Praktycznym przykładem może być kod w którym pierwszym parametrem boost::compressed_pair jest kontener z danymi, a drugim funktor określający sposób w jaki mają zostać posortowane w nim dane.
Przykład
#include <boost/compressed_pair.hpp>
#include <cstdio>
#include <utility>
template < class Pierwszy, class Drugi >
void sprawdzRozmiar( const char * sOpis )
{
typedef std::pair < Pierwszy, Drugi > ZwyklyKluczT;
typedef boost::compressed_pair < Pierwszy, Drugi > SkompresowanyKluczT;
printf( "Wywolanie sprawdzRozmiar<%s>:\n", sOpis );
printf( " sizeof(ZwyklyKluczT) = %d\n", sizeof( ZwyklyKluczT ) );
printf( " sizeof(SkompresowanyKluczT) = %d\n", sizeof( SkompresowanyKluczT ) );
printf( "----------------------------\n" );
}
class JakisFunktor
{
};
class JakasKlasa
{
int x;
int y;
};
int main()
{
sprawdzRozmiar < int, int >( "int,int" );
sprawdzRozmiar < int, JakisFunktor >( "int,JakisFunktor" );
sprawdzRozmiar < JakisFunktor, int >( "JakisFunktor,int" );
sprawdzRozmiar < JakisFunktor, JakisFunktor >( "JakisFunktor,JakisFunktor" );
sprawdzRozmiar < JakasKlasa, JakasKlasa >( "JakasKlasa,JakasKlasa" );
sprawdzRozmiar < JakasKlasa, JakisFunktor >( "JakasKlasa,JakisFunktor" );
return 0;
}
Standardowe wyjście programu:
Wywolanie sprawdzRozmiar<int,int>:
sizeof(ZwyklyKluczT) = 8
sizeof(SkompresowanyKluczT) = 8
----------------------------
Wywolanie sprawdzRozmiar<int,JakisFunktor>:
sizeof(ZwyklyKluczT) = 8
sizeof(SkompresowanyKluczT) = 4
----------------------------
Wywolanie sprawdzRozmiar<JakisFunktor,int>:
sizeof(ZwyklyKluczT) = 8
sizeof(SkompresowanyKluczT) = 4
----------------------------
Wywolanie sprawdzRozmiar<JakisFunktor,JakisFunktor>:
sizeof(ZwyklyKluczT) = 2
sizeof(SkompresowanyKluczT) = 1
----------------------------
Wywolanie sprawdzRozmiar<JakasKlasa,JakasKlasa>:
sizeof(ZwyklyKluczT) = 16
sizeof(SkompresowanyKluczT) = 16
----------------------------
Wywolanie sprawdzRozmiar<JakasKlasa,JakisFunktor>:
sizeof(ZwyklyKluczT) = 12
sizeof(SkompresowanyKluczT) = 8
----------------------------
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.