Technical Report 1

Z Wikipedii, wolnej encyklopedii

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 | edytuj kod]

Generalne narzędzia[edytuj | edytuj kod]

Reference Wrapper[edytuj | edytuj kod]

  • 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 | edytuj kod]

  • 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 | edytuj kod]

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

Polymorphic Function Wrapper[edytuj | edytuj kod]

  • 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 | edytuj kod]

  • 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 | edytuj kod]

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

mem_fn[edytuj | edytuj kod]

  • 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 | edytuj kod]

  • 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 | edytuj kod]

Generowanie liczb losowych[edytuj | edytuj kod]

  • 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 | edytuj kod]

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

Kontenery[edytuj | edytuj kod]

Krotki[edytuj | edytuj kod]

  • 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 | edytuj kod]

  • 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 | edytuj kod]

  • 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 | edytuj kod]

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

Kompatybilność z C[edytuj | edytuj kod]

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 | edytuj kod]

  • 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