C++ Technical Report 1 (TR1) je obecný název pro normu ISO/IEC TR 19768, C++ Extension Libraries je dokument, který navrhuje doplňky ke standardu knihoven C++. Mezi doplňky patří regulární výrazy , inteligentní ukazatele , hašovací tabulky a generátory náhodných čísel . TR1 není standard, ale spíše návrh dokumentu. Většina jeho návrhů se však stala součástí dalšího oficiálního standardu C++11 .
Dokument byl nejprve distribuován jako návrh technické zprávy o rozšířeních knihoven C++ , poté publikován jako norma ISO/IEC v roce 2007 pod názvem ISO/IEC TR 19768:2007 .
Všechny doplňky, které TR1 popisuje, jsou v jmenném prostoru std::tr1
Definováno v záhlaví souboru tr1/functional
V tr1/functional je definováno několik metašablon : is_pod, has_virtual_destructor, remove_extent a další. Založeno na vlastnostech typu Boost.
Soubor hlavičky tr1/random definuje:
Některé funkce TR1, jako jsou speciální matematické funkce a některé doplňky C99 , které nejsou zahrnuty v implementaci TR1 Visual C++.
Tyto doplňky se do C++11 nedostaly.
Následující tabulka uvádí všech 23 speciálních funkcí popsaných v TR1.
Název funkce | Funkční prototyp | matematický výraz |
---|---|---|
Zobecněné Laguerrovy polynomy | double assoc_laguerre (bez znaménka n, m bez znaménka, dvojité x) ; | |
Přidružené Legendreovy polynomy | double assoc_legendre (bez znaménka l, m bez znaménka, dvojité x) ; | |
funkce beta | double beta (double x, double y) ; | |
Kompletní normální eliptický Legendreův integrál 1. druhu | double comp_ellint_1 (double k) ; | |
Kompletní normální eliptický Legendreův integrál 2. druhu | double comp_ellint_2 (double k) ; | |
Kompletní normální eliptický Legendreův integrál 3. druhu | double comp_ellint_3 (double k, double nu) ; | |
Degenerované hypergeometrické funkce | double conf_hyperg (double a, double c, double x) ; | |
Pravidelné Cylindrické Besselovy funkce | double cyl_bessel_i (dvojité nu, dvojité x) ; | |
Cylindrické Besselovy funkce prvního druhu | double cyl_bessel_j (dvojité nu, dvojité x) ; | |
en:Nepravidelné modifikované cylindrické Besselovy funkce | double cyl_bessel_k (dvojité nu, dvojité x) ; | |
cs:Válcové Neumannovy funkce
cs:Válcové Besselovy funkce druhého druhu |
double cyl_neumann (dvojité nu, dvojité x) ; | |
Neúplný normální eliptický integrál 1. druhu | double ellint_1 (double k, double phi) ; | |
Neúplný normální eliptický integrál 2. druhu | double ellint_2 (dvojité k, dvojité phi) ; | |
Neúplný normální eliptický integrál 3. druhu | double ellint_3 (dvojité k, dvojité nu, dvojité phi) ; | |
Integrální exponenciální funkce | double exint (dvojité x) ; | |
Hermitovy polynomy | dvojitý poustevník (nesignováno n, dvojité x) ; | |
cs:Hypergeometrické řady | double hyperg (double a, double b, double c, double x) ; | |
cs:Laguerrovy polynomy | double laguerre (nesignováno n, dvojité x) ; | |
cs:Legendre polynomy | double legendre (nesignováno l, dvojité x) ; | |
Riemann zeta funkce | double riemann_zeta (dvojité x) ; | |
cs:Sférické Besselovy funkce prvního druhu | double sph_bessel (neznaménko n, dvojité x) ; | |
cs:Sférické související Legendre funkce | double sph_legendre (nesigned l, unsigned m, double theta) ; | |
cs:Sférické Neumannovy funkce
cs:Sférické Besselovy funkce druhého druhu |
double sph_neumann (neznaménko n, dvojité x) ; |
Každá funkce má dvě další možnosti. Přidáním přípony F' nebo 'L' k názvu funkce získáte funkci, která působí na hodnoty float nebo long double. Například:
float sph_neumannf ( unsigned n , float x ) ; long double sph_neumannl ( unsigned n , long double x ) ;Typ pro n-tice je tuple, založený na Boost Tuple, podobně jako rozšíření std:pair pro více objektů.
Typ pro pole s pevnou délkou je pole, založené na Boost Array.
Soubory záhlaví unordered_set, unordered_map. Typy unordered_set, unordered_multiset, unordered_map, unordered_multimap (podobně jako set, multiset, map, multimap). Poskytují v průměru konstantní přístupovou dobu, ale v nejhorším případě bude doba trvání operace lineárně složitá na počtu prvků v kontejneru.
hlavičkový soubor regex, poskytuje regex, regex_match, regex_search, regex_replace atd. Na základě Boost RegEx
Jedním z konceptů při vývoji C++ bylo, aby byl co nejvíce kompatibilní s programovacím jazykem C. Tento koncept však nebyl a není prioritou, ale pouze důrazně doporučován, a proto C++ nelze v užším slova smyslu považovat za nadmnožinu C (standardy těchto jazyků se liší). TR1 je pokusem sladit některé rozdíly mezi těmito jazyky přidáním různých záhlaví do následujících knihoven C++: <complex>, <locale>, <cmath>atd. Tyto změny pomáhají uvést C++ do souladu s C99 (ne všechny části C99 jsou zahrnuty v TR1).
Plánovalo se publikovat další sadu dodatků, C++ Technical Report 2 , po standardizaci C++11 [1] . Standardizační komise však následně TR2 opustila ve prospěch kompaktních specifikací specifických pro doménu [2] .
Některá z navrhovaných rozšíření: