C++ Technical Report 1 (TR1) är det generiska namnet för ISO/IEC TR 19768-standarden, C++ Extension Libraries är ett dokument som föreslår tillägg till C++-biblioteksstandarden. Tillägg inkluderar reguljära uttryck , smarta pekare , hashtabeller och slumptalsgeneratorer . TR1 är inte en standard, utan snarare ett utkast till dokument. Men de flesta av hans förslag blev en del av nästa officiella standard, C++11 .
Dokumentet distribuerades först som ett utkast till Draft Technical Report on C++ Library Extensions och publicerades sedan som en ISO/IEC-standard 2007 under titeln ISO/IEC TR 19768:2007 .
Alla tillägg som TR1 beskriver finns i namnutrymmet std::tr1
Definierat i rubrikfil tr1/functional
Flera metamallar är definierade i tr1/functional : is_pod, has_virtual_destructor, remove_extent och andra. Baserat på boosttypegenskaper.
Tr1/random header-filen definierar:
Vissa funktioner i TR1, som speciella matematiska funktioner och vissa C99- tillägg , som inte ingår i Visual C++-implementeringen av TR1.
Dessa tillägg kom inte in i C++11.
Följande tabell listar alla 23 specialfunktioner som beskrivs i TR1.
Funktionsnamn | Funktionsprototyp | matematiska uttryck |
---|---|---|
Generaliserade Laguerre polynom | dubbel assoc_laguerre (osignerad n, osignerad m, dubbel x) ; | |
Associerade Legendre polynom | dubbel assoc_legendre (osignerad l, osignerad m, dubbel x) ; | |
betafunktion | dubbel beta (dubbel x, dubbel y); | |
Komplett normal elliptisk Legendre-integral av första slaget | dubbel komp_ellint_1 (dubbel k) ; | |
Komplett normal elliptisk Legendre-integral av 2:a slaget | dubbel komp_ellint_2 (dubbel k) ; | |
Komplett normal elliptisk Legendre-integral av 3:e sorten | dubbel komp_ellint_3 (dubbel k, dubbel nu); | |
Degenererade hypergeometriska funktioner | dubbel conf_hyperg (dubbel a, dubbel c, dubbel x) ; | |
Vanliga cylindriska besselfunktioner | dubbel cyl_bessel_i (dubbel nu, dubbel x) ; | |
Cylindriska Bessel-funktioner av det första slaget | dubbel cyl_bessel_j (dubbel nu, dubbel x) ; | |
sv: Oregelbundna modifierade cylindriska Bessel-funktioner | dubbel cyl_bessel_k (dubbel nu, dubbel x) ; | |
sv: Cylindriska Neumann-funktioner
sv: Cylindriska Bessel-funktioner av det andra slaget |
dubbel cyl_neumann (dubbel nu, dubbel x) ; | |
Ofullständig normal elliptisk integral av 1:a slaget | dubbel ellint_1 (dubbel k, dubbel phi); | |
Ofullständig normal elliptisk integral av 2:a slaget | dubbel ellint_2 (dubbel k, dubbel phi); | |
Ofullständig normal elliptisk integral av 3:e slaget | dubbel ellint_3 (dubbel k, dubbel nu, dubbel phi); | |
Integral exponentialfunktion | dubbel expint (dubbel x); | |
Hermitpolynom | dubbel eremit (osignerad n, dubbel x); | |
sv:Hypergeometrisk serie | dubbel hyperg (dubbel a, dubbel b, dubbel c, dubbel x); | |
sv:Laguerre polynom | dubbel laguerre (osignerad n, dubbel x); | |
sv: Legendre polynom | dubbel legendre (osignerad l, dubbel x); | |
Riemann zeta funktion | dubbel riemann_zeta (dubbel x) ; | |
sv: Sfäriska Bessel-funktioner av det första slaget | dubbel sph_bessel (osignerad n, dubbel x) ; | |
sv: Sfäriskt associerade Legendre-funktioner | dubbel sph_legendre (osignerad l, osignerad m, dubbel theta); | |
sv: Sfäriska Neumann-funktioner
sv: Sfäriska Bessel-funktioner av det andra slaget |
dubbel sph_neumann (osignerad n, dubbel x) ; |
Varje funktion har ytterligare två alternativ. Att lägga till ett F' eller 'L' suffix till ett funktionsnamn ger en funktion som verkar på flytande respektive långa dubbla värden. Till exempel:
float sph_neumannf ( osignerad n , float x ) ; lång dubbel sph_neumannl ( osignerad n , lång dubbel x ) ;Typen för tuppel är tuppel, baserad på Boost Tuple, liknande tillägget std:pair för fler objekt.
Typen för arrayer med fast längd är array, baserad på Boost Array.
Rubrikfiler unordered_set, unordered_map. Typer unordered_set, unordered_multiset, unordered_map, unordered_multimap (liknar set, multiset, map, multimap). De ger en konstant åtkomsttid i genomsnitt, men i värsta fall kommer varaktigheten av operationen att ha linjär komplexitet på antalet element i behållaren.
regex-huvudfil, tillhandahåller regex, regex_match, regex_search, regex_replace, etc. Baserat på Boost RegEx
Ett av koncepten i utvecklingen av C++ var att göra det så kompatibelt som möjligt med programmeringsspråket C. Detta koncept var dock inte och är inte en prioritet, utan endast starkt rekommenderad, och därför kan C ++ inte i strikt mening betraktas som en superset av C (standarderna för dessa språk skiljer sig åt). TR1 är ett försök att förena några av skillnaderna mellan dessa språk genom att lägga till olika rubriker till följande C++-bibliotek: <complex>, <locale>, <cmath>etc. Dessa ändringar hjälper till att bringa C++ i linje med C99 (inte alla delar av C99 ingår i TR1).
Det fanns planer på att publicera nästa uppsättning tillägg, C++ Technical Report 2 , efter C++11- standardiseringen [1] . Men standardiseringskommittén övergav sedan TR2 till förmån för kompakta, domänspecifika specifikationer [2] .
Några av de föreslagna tilläggen: