Technical Report 1

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

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]

Generacja 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