Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Biblioteki C/C++

compressed_pair

[szablon klasy] Odpowiednik szablonu std::pair umożliwiający zmniejszenie rozmiaru danych.

Składnia

C/C++
#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

C/C++
#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