C++ Technical Report 1 (TR1) on yleisnimi ISO/IEC TR 19768 -standardille, C++ Extension Libraries on asiakirja, joka ehdottaa lisäyksiä C++-kirjastostandardiin. Lisäosat sisältävät säännöllisiä lausekkeita , älykkäitä osoittimia , hash-taulukoita ja satunnaislukugeneraattoreita . TR1 ei ole standardi, vaan pikemminkin asiakirjaluonnos. Suurin osa hänen ehdotuksistaan tuli kuitenkin osaksi seuraavaa virallista standardia C++11 .
Asiakirja jaettiin ensin luonnoksena Draft Technical Report on C++ Library Extensions , minkä jälkeen se julkaistiin ISO/IEC-standardina vuonna 2007 nimellä ISO/IEC TR 19768:2007 .
Kaikki TR1:n kuvaamat lisäykset ovat nimiavaruudessa std::tr1
Määritetään otsikkotiedostossa tr1/functional
Useita metamalleja on määritelty tr1/functional :ssa: is_pod, has_virtual_destructor, remove_extent ja muut. Perustuu Boost-tyypin ominaisuuksiin.
tr1/random otsikkotiedosto määrittää:
Jotkut TR1:n ominaisuudet, kuten erityiset matemaattiset funktiot ja jotkut C99 -lisäykset , jotka eivät sisälly TR1:n Visual C++ -toteutukseen.
Nämä lisäykset eivät päässeet C++11:een.
Seuraavassa taulukossa on lueteltu kaikki TR1:ssä kuvatut 23 erikoistoimintoa.
Toiminnon nimi | Toiminnon prototyyppi | matemaattinen lauseke |
---|---|---|
Yleistetyt Laguerren polynomit | double assoc_laguerre (signed n, unsigned m, double x) ; | |
Liittyvät Legendre-polynomit | double assoc_legendre (signed l, unsigned m, double x) ; | |
beta-toiminto | kaksoisbeeta ( double x, double y) ; | |
Täydellinen normaali elliptinen 1. tyyppinen Legendre-integraali | double comp_ellint_1 (double k) ; | |
Täydellinen normaali elliptinen Legendre-integraali 2. lajista | double comp_ellint_2 (double k) ; | |
Täydellinen normaali elliptinen Legendre-integraali 3. lajista | double comp_ellint_3 (double k, double nu) ; | |
Degeneroituneet hypergeometriset funktiot | double conf_hyperg (double a, double c, double x) ; | |
Tavalliset sylinterimäiset Bessel-toiminnot | double cyl_bessel_i (double nu, double x) ; | |
Ensimmäisen tyyppiset lieriömäiset Bessel-funktiot | double cyl_bessel_j (double nu, double x) ; | |
fi:Epäsäännölliset modifioidut sylinterimäiset Besselin toiminnot | double cyl_bessel_k (double nu, double x) ; | |
fi:Sylinterimäiset Neumann-funktiot
fi: Toisen tyyppiset sylinterimäiset Bessel-funktiot |
double cyl_neumann (double nu, double x) ; | |
Epätäydellinen 1. tyypin normaali elliptinen integraali | double ellint_1 (kaksois k, tupla phi) ; | |
Epätäydellinen 2. tyypin normaali elliptinen integraali | double ellint_2 (double k, double phi) ; | |
Epätäydellinen 3. tyyppinen normaali elliptinen integraali | double ellint_3 (double k, double nu, double phi) ; | |
Integraalinen eksponentiaalinen funktio | double expint (double x) ; | |
Eremiittipolynomit | kaksinkertainen erakko (signed n, double x) ; | |
fi:Hypergeometrinen sarja | double hyperg (kaksois a, tuplab, tupla c, tupla x) ; | |
fi:Laguerren polynomit | double laguerre (signed n, double x) ; | |
fi:Legendre-polynomit | double legendre (signed l, double x) ; | |
Riemannin zeta-funktio | double riemann_zeta (kaksois x) ; | |
fi:Ensimmäisen tyyppiset pallomaiset Bessel-funktiot | double sph_bessel (signed n, double x) ; | |
fi:Spherical liittyvät Legendre-funktiot | double sph_legendre (signed l, unsigned m, double theta) ; | |
fi:Pyöreät Neumann-funktiot
fi: Toisen tyyppiset pallomaiset Bessel-funktiot |
double sph_neumann (signed n, double x) ; |
Jokaisessa toiminnossa on kaksi lisävaihtoehtoa. F- tai L-liitteen lisääminen funktion nimeen antaa funktion, joka vaikuttaa vastaavasti kelluviin tai pitkiin kaksoisarvoihin. Esimerkiksi:
float sph_neumannf ( signed n , float x ) ; long double sph_neumannl ( signed n , long double x ) ;Tuplejen tyyppi on tuple, joka perustuu Boost Tupleen, samanlainen kuin std:pair-laajennus useammalle objektille.
Kiinteäpituisten taulukoiden tyyppi on array, joka perustuu Boost Array -järjestelmään.
Otsikkotiedostot unordered_set, unordered_map. Tyypit unordered_set, unordered_multiset, unordered_map, unordered_multimap (samanlainen kuin set, multiset, map, multimap). Ne tarjoavat keskimäärin jatkuvan pääsyajan, mutta pahimmassa tapauksessa toiminnan kesto on lineaarinen monimutkaisuus säiliön elementtien lukumäärän suhteen.
regex-otsikkotiedosto, tarjoaa regex-, regex_match-, regex_search-, regex_replace- jne. Perustuu Boost RegExiin
Yksi C++:n kehittämisen konsepteista oli tehdä siitä mahdollisimman yhteensopiva C-ohjelmointikielen kanssa. Tämä konsepti ei kuitenkaan ollut eikä ole prioriteetti, vaan vain erittäin suositeltava, ja siksi C ++:aa ei voida pitää C:n suppeassa merkityksessä superjoukkona (näiden kielten standardit vaihtelevat). TR1 on yritys sovittaa yhteen näiden kielten väliset erot lisäämällä eri otsikot seuraaviin C++-kirjastoihin: <complex>, <locale>, <cmath>jne. Nämä muutokset auttavat saattamaan C++:n linjaan C99 :n kanssa (kaikki C99:n osat eivät sisälly TR1:een).
Suunnitelmissa oli julkaista seuraavat lisäykset, C++ Technical Report 2 , C++11 -standardoinnin jälkeen [1] . Myöhemmin standardointikomitea kuitenkin hylkäsi TR2 :n ja suosi kompakteja, aluekohtaisia määrityksiä [2] .
Jotkut ehdotetuista laajennuksista: