przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
tuple
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
======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ę. <code cpp> /* 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"); </code> Jeśli jeden z elementów krotki nie udostępnia konstrukcji domyślnej konieczna jest jawna inicjalizacja. <code cpp> 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 </code> 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). Jak to zmienić przeczytasz [[tuple#Ciekawostki|tutaj]]. <code cpp> boost::make_tuple(10, "Moja krotka", 10.5); //Tworzy krotkę na podstawie dedukcji typów </code> =====Ciekawostki===== 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.1206991683.txt.gz
· ostatnio zmienione: 2008/03/31 21:28 przez
zegadlor
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry