Narzędzia użytkownika

Narzędzia witryny


tuple

To jest stara wersja strony!


Biblioteka Boost Tuple

Czasem w czasie pisania kodu zachodzi potrzeba zgrupowania kilku obiektów w jeden. Biblioteka standardowa implementuje szablon std::pair, który potrafi zgrupować dwa obiekty. Wraz z szablonem funkcji std::make_pair i operatorami porównywania szablon ten tworzy dość przydatne programiście narzędzi. Co w momencie gdy potrzebujemy takiego narzędzia do zgrupowania 3 i więcej wartości? Możemy pokusić się o napisanie własnej klasy bądź szablonu klas grupującego obiekty. O wiele wygodniej jednak skorzystać z gotowego rozwiązania jakie oferuje nam biblioteka Boost Tuple. Oferuje ona szablon boost::tuple pozwalający agregować do 10 elementów.

Tworzenie krotek

Do korzystanie z typu boost::tuple niezbędne jest załączenie do programu nagłówka „boost/tuple/tuple.hpp”. Aby utworzyć obiekt typu tuple należy podać typ obiektów wchodzących w skład krotki i opcjonalnie listę wartości początkowych o typach zgodnych z typami poszczególnych obiektów tworzących krotkę.

/* Tworzymy krotkę o trzech elementach. Wszystkie zostaną zainicjowane zerami. */
boost::tuple<int, int, double> foo; 
 
/* Krotka o trzech elementach jawnie zainicjowanych. */
boost::tuple<std::string, double, int> foo("Moja krotka", 29, 5);
 
/* Pozostałe obiekty zostaną zainicjowane domyślnie.*/
boost::tuple<std::string, double, int> foo("Moja krotka");

Jeśli jeden z elementów krotki nie udostępnia konstrukcji domyślnej konieczna jest jawna inicjalizacja.

class A  //Nasza klasa A
{
  private:
    A();   //Prywatny konstruktor domyślny
  public:
    A(int& i);  //Publiczny konstruktor
};
 
boost::tuple<A, A, A, A> foo;   //Błąd. Brak konstruktora domyślnego dla klasy A.
boost::tuple<A, A, A, A> foo(1, 2, 3, 4);  //Poprawne

Do tworzenia krotek możemy też użyć funkcji make_tuple, która utworzy krotkę na podstawie dedukcji typów podobnie jak robi to funkcja make_pair dla typu std::pair z biblioteki standardowej. Domyślnie make_tuple określa typy jako niereferencyjne i modyfikowalne (brak const).

boost::make_tuple(10, "Moja krotka", 10.5);  //Tworzy krotkę na podstawie dedukcji typów
Porównywanie krotek za pomocą operatorów relacji staje się dostępne po włączeniu "boost/tuple/tuple_comparison.hpp". Do korzystania z operacji wejścia-wyjścia na krotkach niezbędne jest dołączenie "boost/tuple/tuple_io.hpp". Podział biblioteki Tuple minimalizuje czas kompilacji. Jeśli nie potrzebujemy operatorów relacyjnych czy operacji wejścia-wyjścia nie ponosimy kosztu ich kompilacji.
tuple.1206991163.txt.gz · ostatnio zmienione: 2008/03/31 21:19 przez zegadlor