A C++ Technical Report 1 (TR1) az ISO/IEC TR 19768 szabvány általános neve, a C++ Extension Libraries pedig egy olyan dokumentum, amely kiegészítéseket javasol a C++ könyvtárszabványhoz. A kiegészítők közé tartoznak a reguláris kifejezések , intelligens mutatók , hash-táblázatok és véletlenszám-generátorok . A TR1 nem szabvány, hanem dokumentumtervezet. Javaslatai többsége azonban a következő hivatalos szabvány, a C++11 részévé vált .
A dokumentumot először a C++ Library Extensions technikai jelentéstervezet tervezeteként terjesztették , majd 2007-ben ISO/IEC szabványként tették közzé ISO/IEC TR 19768:2007 címmel .
A TR1 által leírt összes kiegészítés az std::tr1 névtérben található
A tr1/functional fejlécfájlban van meghatározva
Számos metasablon van definiálva a tr1/functional fájlban: is_pod, has_virtual_destructor, remove_extent és mások. Boost típusú jellemzők alapján.
A tr1/random fejlécfájl a következőket határozza meg:
A TR1 egyes funkciói, például speciális matematikai függvények és néhány C99 kiegészítés , amelyek nem szerepelnek a TR1 Visual C++ megvalósításában.
Ezek a kiegészítések nem kerültek be a C++11-be.
Az alábbi táblázat felsorolja a TR1-ben leírt 23 speciális funkciót.
Funkció neve | Funkció prototípusa | matematikai kifejezés |
---|---|---|
Általánosított Laguerre-polinomok | double assoc_laguerre (előjel nélküli n, előjel nélküli m, kettős x) ; | |
Kapcsolódó Legendre-polinomok | double assoc_legendre (előjel nélküli l, előjel nélküli m, kettős x) ; | |
béta funkció | kettős béta (dupla x, dupla y) ; | |
Teljes normál elliptikus Legendre integrál az 1. típusú | double comp_ellint_1 (double k) ; | |
Teljes normál elliptikus Legendre integrál, a 2. fajtából | double comp_ellint_2 (dupla k) ; | |
Teljes, normál elliptikus Legendre integrál, a 3. fajtából | double comp_ellint_3 (double k, double nu) ; | |
Degenerált hipergeometriai függvények | double conf_hyperg (double a, double c, double x) ; | |
Szabályos hengeres Bessel-funkciók | double cyl_bessel_i (double nu, double x) ; | |
Az első típusú hengeres Bessel-függvények | double cyl_bessel_j (double nu, double x) ; | |
hu: Szabálytalanul módosított hengeres Bessel-függvények | double cyl_bessel_k (double nu, double x) ; | |
hu:Hengeres Neumann-függvények
hu: A második típusú hengeres Bessel-függvények |
double cyl_neumann (double nu, double x) ; | |
Hiányos, 1. típusú normál elliptikus integrál | double ellint_1 (dupla k, dupla phi) ; | |
2. típusú, hiányos normál elliptikus integrál | double ellint_2 (dupla k, dupla phi) ; | |
3. típusú, hiányos normál elliptikus integrál | double ellint_3 (double k, double nu, double phi) ; | |
Integrál exponenciális függvény | kettős expint (dupla x) ; | |
Hermite polinomok | kettős remete (előjel nélküli n, kettős x) ; | |
hu:Hipergeometrikus sorozat | double hyperg (dupla a, dupla b, dupla c, dupla x) ; | |
hu:Laguerre polinomok | double laguerre (előjel nélküli n, dupla x) ; | |
hu:Legendre polinomok | kettős legenda (jel nélküli l, kettős x) ; | |
Riemann zéta függvény | double riemann_zeta (dupla x) ; | |
hu: Az első típusú gömb alakú Bessel-függvények | double sph_bessel (előjel nélküli n, dupla x) ; | |
hu:Gömb alakú kapcsolódó Legendre-függvények | double sph_legendre (előjel nélküli l, előjel nélküli m, kettős théta) ; | |
hu:Gömb alakú Neumann-függvények
hu: Második típusú gömb alakú Bessel-függvények |
double sph_neumann (előjel nélküli n, dupla x) ; |
Mindegyik funkcióhoz két további lehetőség tartozik. Ha egy függvénynévhez F' vagy 'L' utótagot adunk, olyan függvényt kapunk, amely lebegő vagy hosszú kettős értékekre hat. Például:
float sph_neumannf ( előjel nélküli n , float x ) ; long double sph_neumannl ( előjel nélküli n , hosszú dupla x ) ;A sorok típusa a tuple, amely a Boost Tuple-n alapul, hasonló az std:pair kiterjesztéshez több objektum esetén.
A rögzített hosszúságú tömbök típusa a Boost Array-n alapuló tömb.
Fejlécfájlok unordered_set, unordered_map. Típusok: unordered_set, unordered_multiset, unordered_map, unordered_multimap (hasonló a set, multiset, map, multimap típusokhoz). Átlagosan állandó hozzáférési időt biztosítanak, de a legrosszabb esetben a művelet időtartama lineárisan bonyolult lesz a konténerben lévő elemek számától függően.
regex fejlécfájl, biztosítja a regex, regex_match, regex_search, regex_replace stb. A Boost RegEx alapján
A C++ fejlesztésének egyik koncepciója az volt, hogy a lehető legjobban kompatibilis legyen a C programozási nyelvvel. Ez a koncepció azonban nem volt és nem is prioritás, hanem csak erősen ajánlott, ezért a C ++ nem tekinthető a C szuperhalmazának (e nyelvek szabványai különböznek). A TR1 egy kísérlet a nyelvek közötti különbségek egy részének összeegyeztetésére azáltal, hogy különböző fejléceket ad hozzá a következő C++ könyvtárakhoz: <complex>, <locale>, stb. Ezek a változtatások segítenek a C++ és a C99<cmath> összhangba hozásában (a C99 nem minden része szerepel a TR1-ben).
A tervek szerint a C++11 szabványosítást követően megjelennek a következő kiegészítések, a C++ Technical Report 2 [1] . A szabványosítási bizottság azonban ezt követően felhagyott a TR2 -vel, és a kompakt, tartomány-specifikus specifikációkat részesítette előnyben [2] .
Néhány javasolt bővítmény: