C++ Technical Report 1 (TR1) este numele generic pentru standardul ISO/IEC TR 19768, C++ Extension Libraries este un document care propune completări la standardul bibliotecii C++. Suplimentele includ expresii regulate , indicatoare inteligente , tabele hash și generatoare de numere aleatorii . TR1 nu este un standard, ci mai degrabă un proiect de document. Cu toate acestea, majoritatea propunerilor sale au devenit parte din următorul standard oficial, C++11 .
Documentul a fost distribuit pentru prima dată ca proiect al Raportului Tehnic privind Extensiile Bibliotecii C++ , apoi publicat ca standard ISO/IEC în 2007 sub titlul ISO/IEC TR 19768:2007 .
Toate completările pe care TR1 le descrie sunt în spațiul de nume std::tr1
Definit în fișierul antet tr1/functional
Mai multe metașabloane sunt definite în tr1/functional : is_pod, has_virtual_destructor, remove_extent și altele. Bazat pe trăsăturile tipului Boost.
Fișierul antet tr1/random definește:
Unele caracteristici ale TR1, cum ar fi funcții matematice speciale și unele completări C99 , care nu sunt incluse în implementarea Visual C++ a TR1.
Aceste completări nu au ajuns în C++11.
Următorul tabel listează toate cele 23 de funcții speciale descrise în TR1.
Numele funcției | Funcție Prototip | expresie matematică |
---|---|---|
Polinoame Laguerre generalizate | dublu assoc_laguerre (n nesemnat, m nesemnat, x dublu) ; | |
Polinoame Legendre asociate | dublu asoc_legendre (l nesemnat, m nesemnat, x dublu) ; | |
funcția beta | dublu beta (dublu x, dublu y) ; | |
Integrală Legendre eliptică normală completă de primul fel | double comp_ellint_1 (double k) ; | |
Integrală Legendre eliptică normală completă de al 2-lea fel | double comp_ellint_2 (double k) ; | |
Integrală Legendre eliptică normală completă de al treilea fel | double comp_ellint_3 (double k, double nu) ; | |
Funcții hipergeometrice degenerate | double conf_hyperg (dublu a, dublu c, dublu x) ; | |
Funcții Bessel cilindrice obișnuite | double cyl_bessel_i (double nu, double x) ; | |
Funcții Bessel cilindrice de primul fel | double cyl_bessel_j (double nu, double x) ; | |
ro:Funcții Bessel cilindrice modificate neregulate | double cyl_bessel_k (double nu, double x) ; | |
ro:Funcții Neumann cilindrice
ro:Funcții Bessel cilindrice de al doilea fel |
double cyl_neumann (double nu, double x) ; | |
Integrală eliptică normală incompletă de primul fel | dublu ellint_1 (dublu k, dublu phi) ; | |
Integrală eliptică normală incompletă de al 2-lea fel | dublu ellint_2 (dublu k, dublu phi) ; | |
Integrală eliptică normală incompletă de al treilea fel | double ellint_3 (double k, double nu, double phi) ; | |
Funcția exponențială integrală | dublu expint (dublu x) ; | |
Polinoame Hermite | dublu pustnic (n nesemnat, dublu x) ; | |
ro:Seria hipergeometrică | dublu hiperg (dublu a, dublu b, dublu c, dublu x) ; | |
ro: polinoame Laguerre | dublu laguerre (n fără semn, x dublu); | |
ro: Polinoame de legendă | legendă dublă (l nesemnat, x dublu) ; | |
Funcția zeta Riemann | double riemann_zeta (double x) ; | |
ro:Funcții sferice Bessel de primul fel | dublu sph_bessel (n nesemnat, x dublu) ; | |
ro:Funcții Legendre asociate sferice | double sph_legendre (unsigned l, unsigned m, double theta) ; | |
ro:Funcții Neumann sferice
ro:Funcții sferice Bessel de al doilea fel |
dublu sph_neumann (n fără semn, x dublu) ; |
Fiecare funcție are două opțiuni suplimentare. Adăugarea unui sufix F’ sau „L” la numele unei funcții dă o funcție care acționează asupra valorilor float sau long duble, respectiv. De exemplu:
float sph_neumannf ( unsigned n , float x ) ; long double sph_neumannl ( n nesemnat , long dublu x ) ;Tipul pentru tupluri este tuple, bazat pe Boost Tuple, similar cu extensia std:pair pentru mai multe obiecte.
Tipul pentru matrice de lungime fixă este matrice, bazat pe Boost Array.
Fișierele antet unordered_set, unordered_map. Tipurile unordered_set, unordered_multiset, unordered_map, unordered_multimap (similar cu set, multiset, map, multimap). Acestea asigură un timp de acces constant în medie, dar în cel mai rău caz, durata operațiunii va avea complexitate liniară asupra numărului de elemente din container.
fișierul antet regex, oferă regex, regex_match, regex_search, regex_replace etc. Bazat pe Boost RegEx
Unul dintre conceptele în dezvoltarea C++ a fost acela de a-l face cât mai compatibil cu limbajul de programare C. Cu toate acestea, acest concept nu a fost și nu este o prioritate, ci doar recomandat cu tărie și, prin urmare, C++ nu poate fi considerat în sens strict un superset al lui C (standardele acestor limbi diferă). TR1 este o încercare de a reconcilia unele dintre diferențele dintre aceste limbi prin adăugarea de anteturi diferite la următoarele biblioteci C++: <complex>, <locale>, <cmath>etc. Aceste modificări ajută la alinierea C++ cu C99 (nu toate părțile C99 sunt incluse în TR1).
Au existat planuri de a publica următorul set de completări, C++ Technical Report 2 , după standardizarea C++11 [1] . Cu toate acestea, comitetul de standardizare a abandonat ulterior TR2 în favoarea specificațiilor compacte, specifice domeniului [2] .
Unele dintre extensiile sugerate: