Technical Report 1 (TR1) to zbiór proponowanych rozszerzeń do biblioteki standardowej C++, takich jak wyrażenia regularne, sprytne wskaźniki, tablice haszujące i generatory liczb losowych. TR1 nie jest jeszcze ustandaryzowany, ale prawdopodobnie stanie się w dzisiejszej formie częścią następnego oficjalnego standardu C++. W tym czasie twórcy narzędzi mogą pomocniczo używać tego dokumentu.

TR1 to nie wszystkie rozszerzenia do biblioteki standardowej które będą dostępne w następnym standardzie; dla przykładu następny standard, C++0x, może zawierać obsługę dla wątków. Istnieje też drugi Technical Report, TR2 planowany do opublikowania po C++0x.

Nowe komponenty znajdują się w przestrzeni nazw std::tr1 aby oddzielić je od obecnej biblioteki standardowej.

Komponenty

edytuj

Generalne narzędzia

edytuj

Reference Wrapper

edytuj
  • przeniesiony z Boost.Ref
  • dodatki do pliku nagłówkowego <functional> - cref, ref, reference_wrapper
  • umożliwia przekazywanie do algorytmów i funktorów referencji, zamiast kopii

Sprytne wskaźniki

edytuj
  • oparte na bibliotece Boost Smart Pointer
  • dodatki do pliku nagłówkowego <memory> - shared_ptr, weak_ptr itd.
  • narzędzie do zarządzania pamięcią umożliwiające odporność na wyjątki, z użyciem idiomu Resource Acquisition Is Initialization (RAII).

Funktory

edytuj

Cztery moduły dodane do nagłówka <functional>:

Polymorphic Function Wrapper

edytuj
  • function
  • oparty na Boost.Function
  • przechowuje wszystkie typy dające się wywołać (wskaźnik do funkcji, wskaźnik do funkcji składowej, funktor) mające podaną sygnaturę wywołania funkcji. nie jest wymagane podanie konkretnego typu obiektu dającego się wywołać.

Function Object Binders

edytuj
  • bind
  • skopiowany z biblioteki Boost Bind
  • zgeneralizowana wersja standardowego std::bind1st i std::bind2nd
  • binduje parametry do funktorów i pozwala na złożenie funkcji

Function Return Types

edytuj
  • result_of
  • skopiowany z Boost
  • ustala typ wyrażenia wywołania

mem_fn

edytuj
  • mem_fn
  • oparte na bibliotece Boost Mem Fn
  • dodatek do standardowych std::mem_fun i std::mem_fun_ref
  • pozwala na traktowanie wskaźników do funkcji składowych jako funktorów

Metaprogramming and Type Traits

edytuj
  • nowy plik nagłówkowy <type_traits> - is_pod, has_virtual_destructor, remove_extend, itd.
  • oparty na bibliotece Boost Type Traits
  • umożliwia metaprogramowanie pozwalając na zapytania i konwersje między różnymi typami

Narzędzia numeryczne

edytuj

Generowanie liczb losowych

edytuj
  • nowy plik nagłówkowy <random> - variate_generator, mersenne_twister, poisson_distribution, itd.
  • narzędzia do generowania liczb losowych z użyciem różnych silników i rozkładów prawdopodobieństwa

Funkcje matematyczne

edytuj
  • dodatki do plików nagłówkowych <cmath>/<math.h> - beta, legendre, itd.
  • funkcje matematyczne

Kontenery

edytuj

Krotki

edytuj
  • nowy plik nagłówkowy <tuple>
  • oparty na bibliotece Boost Tuple
  • rozszerzenie standardowego std::pair
  • stałego rozmiaru kolekcje elementów mogących mieć różne typy

Tablica stałego rozmiaru

edytuj
  • nowy plik nagłówkowy <array>
  • pobrany z biblioteki Boost Array
  • w przeciwieństwie do dynamicznych typów tablicowych takich jak standardowy std::vector

Tablica haszująca

edytuj
  • nowe pliki nagłówkowe <unordered_set>, <unordered_map>
  • nowa implementacja, nie oparta na istniejącej bibliotece, z api nie do końca kompatybilnym z istniejącymi bibliotekami
  • tak jak wszystkie tablice haszujące zwykle umożliwia dostęp do elementów w czasie stałym, a w najgorszym przypadku w czasie liniowym do rozmiaru pojemnika

Wyrażenia regularne

edytuj
  • nowy plik nagłówkowy <regex> - regex, regex_match, regex_search, regex_replace, itd.
  • oparte na bibliotece Boost RegEx

Kompatybilność z C

edytuj

TR1 próbuje poprzez różne dodatki do plików nagłówkowych z C++, takich jak <complex>, <locale>, <cmath> przybliżyć C++ do wersji C99 standardu C. (nie wszystkie części C99 są dostępne w TR1).

Zobacz też

edytuj
  • Boost, zbiór przenośnych bibliotek dla języka C++, wiele z nich znajduje się w TR1.
  • Standard Template Library, część obecnej biblioteki standardowej C++
  • Dinkumware, jedyny komercyjny dostawca w pełni implementujący TR1