Technická zpráva C++ 1

C++ Technical Report 1 (TR1) je obecný název pro normu ISO/IEC TR 19768, C++ Extension Libraries je dokument, který navrhuje doplňky ke standardu knihoven C++. Mezi doplňky patří regulární výrazy , inteligentní ukazatele , hašovací tabulky a generátory náhodných čísel . TR1 není standard, ale spíše návrh dokumentu. Většina jeho návrhů se však stala součástí dalšího oficiálního standardu C++11 .

Dokument byl nejprve distribuován jako návrh technické zprávy o rozšířeních knihoven C++ , poté publikován jako norma ISO/IEC v roce 2007 pod názvem ISO/IEC TR 19768:2007 .

Dodatky popsané v TR1

Všechny doplňky, které TR1 popisuje, jsou v jmenném prostoru std::tr1

Obecné služby

Funkční objekty

Definováno v záhlaví souboru tr1/functional

Metaprogramování a typové vlastnosti

V tr1/functional je definováno několik metašablon : is_pod, has_virtual_destructor, remove_extent a další. Založeno na vlastnostech typu Boost.

PRNG

Soubor hlavičky tr1/random definuje:

Speciální matematické funkce

Některé funkce TR1, jako jsou speciální matematické funkce a některé doplňky C99 , které nejsou zahrnuty v implementaci TR1 Visual C++.

Tyto doplňky se do C++11 nedostaly.

Následující tabulka uvádí všech 23 speciálních funkcí popsaných v TR1.

Název funkce Funkční prototyp matematický výraz
Zobecněné Laguerrovy polynomy double assoc_laguerre (bez znaménka n, m bez znaménka, dvojité x) ;
Přidružené Legendreovy polynomy double assoc_legendre (bez znaménka l, m bez znaménka, dvojité x) ;
funkce beta double beta (double x, double y) ;
Kompletní normální eliptický Legendreův integrál 1. druhu double comp_ellint_1 (double k) ;
Kompletní normální eliptický Legendreův integrál 2. druhu double comp_ellint_2 (double k) ;
Kompletní normální eliptický Legendreův integrál 3. druhu double comp_ellint_3 (double k, double nu) ;
Degenerované hypergeometrické funkce double conf_hyperg (double a, double c, double x) ;
Pravidelné Cylindrické Besselovy funkce double cyl_bessel_i (dvojité nu, dvojité x) ;
Cylindrické Besselovy funkce prvního druhu double cyl_bessel_j (dvojité nu, dvojité x) ;
en:Nepravidelné modifikované cylindrické Besselovy funkce double cyl_bessel_k (dvojité nu, dvojité x) ;
cs:Válcové Neumannovy funkce

cs:Válcové Besselovy funkce druhého druhu

double cyl_neumann (dvojité nu, dvojité x) ;
Neúplný normální eliptický integrál 1. druhu double ellint_1 (double k, double phi) ;
Neúplný normální eliptický integrál 2. druhu double ellint_2 (dvojité k, dvojité phi) ;
Neúplný normální eliptický integrál 3. druhu double ellint_3 (dvojité k, dvojité nu, dvojité phi) ;
Integrální exponenciální funkce double exint (dvojité x) ;
Hermitovy polynomy dvojitý poustevník (nesignováno n, dvojité x) ;
cs:Hypergeometrické řady double hyperg (double a, double b, double c, double x) ;
cs:Laguerrovy polynomy double laguerre (nesignováno n, dvojité x) ;
cs:Legendre polynomy double legendre (nesignováno l, dvojité x) ;
Riemann zeta funkce double riemann_zeta (dvojité x) ;
cs:Sférické Besselovy funkce prvního druhu double sph_bessel (neznaménko n, dvojité x) ;
cs:Sférické související Legendre funkce double sph_legendre (nesigned l, unsigned m, double theta) ;
cs:Sférické Neumannovy funkce

cs:Sférické Besselovy funkce druhého druhu

double sph_neumann (neznaménko n, dvojité x) ;

Každá funkce má dvě další možnosti. Přidáním přípony F' nebo 'L' k názvu funkce získáte funkci, která působí na hodnoty float nebo long double. Například:

float sph_neumannf ( unsigned n , float x ) ; long double sph_neumannl ( unsigned n , long double x ) ;

Kontejnery

Typ pro n-tice je tuple, založený na Boost Tuple, podobně jako rozšíření std:pair pro více objektů.

Typ pro pole s pevnou délkou je pole, založené na Boost Array.

Hash kontejnery

Soubory záhlaví unordered_set, unordered_map. Typy unordered_set, unordered_multiset, unordered_map, unordered_multimap (podobně jako set, multiset, map, multimap). Poskytují v průměru konstantní přístupovou dobu, ale v nejhorším případě bude doba trvání operace lineárně složitá na počtu prvků v kontejneru.

Regulární výrazy

hlavičkový soubor regex, poskytuje regex, regex_match, regex_search, regex_replace atd. Na základě Boost RegEx

C kompatibilita

Jedním z konceptů při vývoji C++ bylo, aby byl co nejvíce kompatibilní s programovacím jazykem C. Tento koncept však nebyl a není prioritou, ale pouze důrazně doporučován, a proto C++ nelze v užším slova smyslu považovat za nadmnožinu C (standardy těchto jazyků se liší). TR1 je pokusem sladit některé rozdíly mezi těmito jazyky přidáním různých záhlaví do následujících knihoven C++: <complex>, <locale>, <cmath>atd. Tyto změny pomáhají uvést C++ do souladu s C99 (ne všechny části C99 jsou zahrnuty v TR1).

Technická zpráva 2

Plánovalo se publikovat další sadu dodatků, C++ Technical Report 2 , po standardizaci C++11 [1] . Standardizační komise však následně TR2 opustila ve prospěch kompaktních specifikací specifických pro doménu [2] .

Některá z navrhovaných rozšíření:

Viz také

Poznámky

  1. Výzva k předkládání návrhů TR2 . Získáno 17. dubna 2013. Archivováno z originálu 18. dubna 2013.
  2. TR2 je mrtvý; místo toho přichází více TR .  (nedostupný odkaz)

Literatura

Odkazy