C++ Technical Report 1 (TR1) er det generiske navn for ISO/IEC TR 19768-standarden, C++ Extension Libraries er et dokument, der foreslår tilføjelser til C++-biblioteksstandarden. Tilføjelser inkluderer regulære udtryk , smarte pointere , hashtabeller og tilfældige talgeneratorer . TR1 er ikke en standard, men derimod et udkast til dokument. De fleste af hans forslag blev dog en del af den næste officielle standard, C++11 .
Dokumentet blev først distribueret som et udkast til Draft Technical Report on C++ Library Extensions , derefter udgivet som en ISO/IEC-standard i 2007 under titlen ISO/IEC TR 19768:2007 .
Alle tilføjelser, som TR1 beskriver, er i navnerummet std::tr1
Defineret i header-fil tr1/functional
Flere metatemplates er defineret i tr1/functional : is_pod, has_virtual_destructor, remove_extent og andre. Baseret på Boost Type-træk.
Tr1/random header-filen definerer:
Nogle funktioner i TR1, såsom specielle matematiske funktioner og nogle C99- tilføjelser , der ikke er inkluderet i Visual C++-implementeringen af TR1.
Disse tilføjelser nåede ikke ind i C++11.
Den følgende tabel viser alle 23 specialfunktioner beskrevet i TR1.
Funktionsnavn | Funktionsprototype | matematisk udtryk |
---|---|---|
Generaliserede Laguerre polynomier | dobbelt assoc_laguerre (usigneret n, usigneret m, dobbelt x); | |
Tilknyttede Legendre polynomier | dobbelt assoc_legendre (usigneret l, usigneret m, dobbelt x); | |
beta funktion | dobbelt beta (dobbelt x, dobbelt y); | |
Komplet normal elliptisk Legendre integral af 1. slags | dobbelt comp_ellint_1 (dobbelt k) ; | |
Komplet normal elliptisk Legendre integral af 2. slags | dobbelt comp_ellint_2 (dobbelt k) ; | |
Komplet normal elliptisk Legendre integral af 3. slags | dobbelt comp_ellint_3 (dobbelt k, dobbelt nu); | |
Degenererede hypergeometriske funktioner | dobbelt conf_hyperg (dobbelt a, dobbelt c, dobbelt x); | |
Almindelige cylindriske besselfunktioner | dobbelt cyl_bessel_i (dobbelt nu, dobbelt x) ; | |
Cylindriske Bessel-funktioner af den første slags | dobbelt cyl_bessel_j (dobbelt nu, dobbelt x) ; | |
da: Uregelmæssige modificerede cylindriske Bessel-funktioner | dobbelt cyl_bessel_k (dobbelt nu, dobbelt x) ; | |
da: Cylindriske Neumann-funktioner
da: Cylindriske Bessel-funktioner af den anden slags |
dobbelt cyl_neumann (dobbelt nu, dobbelt x); | |
Ufuldstændigt normalt elliptisk integral af 1. slags | dobbelt ellint_1 (dobbelt k, dobbelt phi); | |
Ufuldstændigt normalt elliptisk integral af 2. slags | dobbelt ellint_2 (dobbelt k, dobbelt phi); | |
Ufuldstændigt normalt elliptisk integral af 3. slags | dobbelt ellint_3 (dobbelt k, dobbelt nu, dobbelt phi); | |
Integral eksponentiel funktion | dobbelt ekspint (dobbelt x); | |
Hermite polynomier | dobbelt eremit (usigneret n, dobbelt x); | |
da: Hypergeometrisk serie | dobbelt hyperg (dobbelt a, dobbelt b, dobbelt c, dobbelt x); | |
da: Laguerre polynomier | dobbelt laguerre (usigneret n, dobbelt x); | |
da: Legendre polynomier | dobbelt legendre (usigneret l, dobbelt x); | |
Riemann zeta funktion | dobbelt riemann_zeta (dobbelt x); | |
da: Kugleformede Bessel-funktioner af den første slags | dobbelt sph_bessel (ufortegn n, dobbelt x); | |
en:Sfærisk associerede Legendre-funktioner | dobbelt sph_legendre (usigneret l, usigneret m, dobbelt theta); | |
da: Sfæriske Neumann-funktioner
da: Sfæriske Bessel-funktioner af den anden slags |
dobbelt sph_neumann (usigneret n, dobbelt x); |
Hver funktion har to ekstra muligheder. Tilføjelse af et F' eller 'L' suffiks til et funktionsnavn giver en funktion, der virker på henholdsvis flydende eller lange dobbelte værdier. For eksempel:
float sph_neumannf ( usigneret n , float x ) ; lang dobbelt sph_neumannl ( ufortegn n , lang dobbelt x ) ;Typen for tuples er tuple, baseret på Boost Tuple, svarende til std:pair-udvidelsen for flere objekter.
Typen for arrays med fast længde er array, baseret på Boost Array.
Header-filer unordered_set, unordered_map. Typer unordered_set, unordered_multiset, unordered_map, unordered_multimap (svarende til set, multiset, map, multimap). De giver en konstant adgangstid i gennemsnit, men i værste fald vil varigheden af operationen have lineær kompleksitet på antallet af elementer i containeren.
regex header-fil, giver regex, regex_match, regex_search, regex_replace osv. Baseret på Boost RegEx
Et af koncepterne i udviklingen af C++ var at gøre det så kompatibelt som muligt med C-programmeringssproget. Dette koncept var dog ikke og er ikke en prioritet, men kun stærkt anbefalet, og derfor kan C ++ ikke i streng forstand betragtes som et supersæt af C (standarderne for disse sprog er forskellige). TR1 er et forsøg på at forene nogle af forskellene mellem disse sprog ved at tilføje forskellige overskrifter til følgende C++-biblioteker: <complex>, <locale>, <cmath>osv. Disse ændringer hjælper med at bringe C++ på linje med C99 (ikke alle dele af C99 er inkluderet i TR1).
Der var planer om at offentliggøre det næste sæt tilføjelser, C++ Technical Report 2 , efter C++11- standardiseringen [1] . Standardiseringsudvalget opgav dog efterfølgende TR2 til fordel for kompakte, domænespecifikke specifikationer [2] .
Nogle af de foreslåede udvidelser: