C ++ technická zpráva 1 - C++ Technical Report 1
C ++ technická zpráva 1 (TR1) je běžný název pro ISO / IEC TR 19768, rozšíření knihovny C ++, což je dokument, který navrhuje dodatky k C ++ standardní knihovna pro C ++ 03 jazykový standard. Mezi doplňky patří regulární výrazy, inteligentní ukazatele, hash tabulky, a generátory náhodných čísel. TR1 nebyl samotný standard, ale spíše návrh dokumentu. Většina jejích návrhů se však stala součástí pozdějšího oficiálního standardu, C ++ 11. Před standardizací jazyka C ++ 11 použili prodejci tento dokument jako vodítko pro vytvoření rozšíření. Cílem zprávy bylo „vybudovat rozšířenější existující praxi pro rozšířenou standardní knihovnu C ++“.
Zpráva byla poprvé rozeslána v podobě návrhu v roce 2005 jako Návrh technické zprávy o rozšířeních knihovny C ++, poté publikováno v roce 2007 jako norma ISO / IEC jako ISO / IEC TR 19768: 2007.
Přehled
Překladače nepotřeboval zahrnout komponenty TR1, aby vyhovoval standardu C ++, protože návrhy TR1 nebyly součástí samotné normy, pouze sada možných dodatků, které ještě nebyly ratifikovány. Většina TR1 však byla k dispozici od Zvýšit a několik distributorů překladačů / knihoven implementovalo všechny nebo některé komponenty. TR1 není úplný seznam dodatků ke knihovně, která se objevila v C ++ 11. Například C ++ 11 obsahuje knihovnu podpory vláken, která není k dispozici v TR1.
Nové komponenty byly definovány v std :: tr1
jmenný prostor odlišit je od tehdy aktuální standardní knihovny.
Součásti
TR1 obsahuje následující komponenty:
Obecné nástroje
Referenční obálka - umožňuje přihrávku Reference, spíše než kopie, do algoritmů nebo funkčních objektů. Tato funkce byla založena na Boost.Ref.[1] A obal odkaz je získán z instance třídy šablony reference_wrapper
. Odkazy na obálky jsou podobné běžným odkazům („&“) v jazyce C ++. Chcete-li získat odkaz na obálku z libovolného objektu, třída šablony ref
se používá (pro konstantní referenci cref
se používá).
Odkazy na obálky jsou užitečné především pro funkce šablon, když dedukce argumentů nededukuje odkaz (např. Při předávání argumentů):
#zahrnout <iostream>#zahrnout <tr1/functional>prázdnota F( int &r ) { ++r; }šablona< třída Funct, třída Arg >prázdnota G( Funct F, Arg t ){ F(t);}int hlavní(){ int i = 0; G( F, i ); // 'g ' je vytvořena instance std::cout << i << " n"; // Výstup: 0 G( F, std::tr1::ref(i) ); // 'g >' je instanční std::cout << i << " n"; // Výstup: 1}
Chytré ukazatele - přidává několik tříd, které ve složitých případech zjednodušují správu životnosti objektu. Přidávají se tři hlavní třídy:
shared_ptr
- referenční počítaný inteligentní ukazatelslabý_ptr
- variantashared_ptr
to nezvyšuje počet odkazů
Návrh je založen na knihovně Boost Smart Pointer.[2]
Funkční objekty
Tyto čtyři moduly jsou přidány do <functional>
hlavičkový soubor:
Obálka polymorfní funkce (funkce
) - lze uložit libovolnou volanou funkci (ukazatele funkce, ukazatele členské funkce a funkční objekty), která používá zadaný podpis volání funkce. Typ nezávisí na druhu použitého volaného. Na základě funkce Boost[3]
Funkční pořadače objektů (svázat
) - může vázat jakýkoli parametr parametry fungovat objekty. Složení funkcí je také povoleno. Toto je zobecněná verze standardu std :: bind1st
a std :: bind2nd
vazebné funkce. Tato funkce je založena na knihovně Boost Bind.[4]
Typy návratových funkcí (výsledek
) - určuje typ výrazu volání.
Členské funkce (mem_fn
) - vylepšení standardu std :: mem_fun
a std :: mem_fun_ref
. Umožňuje ukazatele členovi funkce být považován za funkční objekty. Založeno na knihovně Boost Mem Fn.[5]
Metaprogramování a znaky typu
Nyní je <type_traits>
hlavičkový soubor, který obsahuje mnoho užitečných meta-šablon vlastností, jako například is_pod
, has_virtual_destructor
, remove_extent
atd. Usnadňuje metaprogramování tím, že umožňuje dotazy a transformaci mezi různými typy. Návrh je založen na knihovně Boost Type Traits.[6]
Numerická zařízení
Generování náhodných čísel
- Nový
<random>
hlavičkový soubor -variate_generator
,mersenne_twister
,poisson_distribution
, atd. - nástroje pro generování náhodných čísel pomocí některého z několika Generátory pseudonáhodných čísel, motory a rozdělení pravděpodobnosti
Matematické speciální funkce
Některé funkce TR1, například matematické speciální funkce a určité doplňky C99, nejsou zahrnuty do implementace TR1 v Visual C ++.Knihovna matematických speciálních funkcí nebyla v C ++ 11 standardizována.
Tyto funkce budou pravděpodobně v hlavním zájmu programátorů v technických a vědeckých oborech.
Následující tabulka ukazuje všech 23 speciálních funkcí popsaných v TR1.
Název funkce | Funkční prototyp | Matematické vyjádření |
---|---|---|
Přidružené Laguerrovy polynomy | dvojnásobek assoc_laguerre(nepodepsané n, nepodepsané m, dvojité x); | |
Přidružené legendární polynomy | dvojnásobek assoc_legendre(nepodepsané l, nepodepsané m, dvojité x); | |
Funkce Beta | dvojnásobek beta(dvojité x, dvojité y); | |
Kompletní eliptický integrál prvního druhu | dvojnásobek comp_ellint_1(dvojité k); | |
Kompletní eliptický integrál druhého druhu | dvojnásobek comp_ellint_2(dvojité k); | |
Kompletní eliptický integrál třetího druhu | dvojnásobek comp_ellint_3(dvojité k, dvojité nu); | |
Soutokové hypergeometrické funkce | dvojnásobek conf_hyperg(dvojité a, dvojité c, dvojité x); | |
Pravidelně upravené válcové Besselovy funkce | dvojnásobek cyl_bessel_i(dvojitá nu, dvojitá x); | |
Válcové Besselovy funkce prvního druhu | dvojnásobek cyl_bessel_j(dvojitá nu, dvojitá x); | |
Nepravidelně upravené válcové Besselovy funkce | dvojnásobek cyl_bessel_k(dvojitá nu, dvojitá x); | |
Válcové Neumannovy funkce | dvojnásobek cyl_neumann(dvojitá nu, dvojitá x); | |
Neúplný eliptický integrál prvního druhu | dvojnásobek ellint_1(dvojité k, dvojité phi); | |
Neúplný eliptický integrál druhého druhu | dvojnásobek ellint_2(dvojité k, dvojité phi); | |
Neúplný eliptický integrál třetího druhu | dvojnásobek ellint_3(dvojité k, dvojité nu, dvojité phi); | |
Exponenciální integrál | dvojnásobek expint(dvojité x); | |
Hermitovy polynomy | dvojnásobek poustevník(nepodepsané n, dvojité x); | |
Hypergeometrická řada | dvojnásobek hyperg(dvojité a, dvojité b, dvojité c, dvojité x); | |
Laguerrovy polynomy | dvojnásobek laguerre(nepodepsané n, dvojité x); | |
Legendární polynomy | dvojnásobek legendre(nepodepsané l, dvojité x); | |
Funkce Riemann zeta | dvojnásobek riemann_zeta(dvojité x); | |
Sférické Besselovy funkce prvního druhu | dvojnásobek sph_bessel(nepodepsané n, dvojité x); | |
Sférické související funkce Legendre | dvojnásobek sph_legendre(nepodepsané l, nepodepsané m, dvojitá theta); | |
Sférické Neumannovy funkce | dvojnásobek sph_neumann(nepodepsané n, dvojité x); |
Každá funkce má dvě další varianty. Připojení přípony „FNebol„K názvu funkce dává funkci, která pracuje na plovák
nebo dlouhý dvojitý
hodnoty. Například:
plovák sph_neumannf( nepodepsaný n, plovák X ) ;dlouho dvojnásobek sph_neumannl( nepodepsaný n, dlouho dvojnásobek X ) ;
Kontejnery
Typy n-tic
- Nový
<tuple>
hlavičkový soubor -n-tice
- založené na knihovně Boost Tuple[7]
- neurčitě rozšíření standardu
std :: pair
- kolekce prvků pevné velikosti, které se mohou lišit typy
Pole pevné velikosti
- Nový
<array>
hlavičkový soubor -pole
- převzato z knihovny Boost Array[8]
- na rozdíl od typů dynamických polí, jako je standard
std :: vektor
Hash tabulky
- Nový
<unordered_set>
,<unordered_map >
hlavičkové soubory - implementují
unordered_set
,unordered_multiset
,unordered_map
, aunordered_multimap
třídy, analogicky ksoubor
,multiset
,mapa
, amultimapa
, resp- bohužel,
unordered_set
aunordered_multiset
nelze použít sset_union
,set_intersection
,set_difference
,set_symmetric_difference
, azahrnuje
standardní funkce knihovny, pro které pracujísoubor
amultiset
- bohužel,
- nová implementace, která není odvozena z existující knihovny, není plně kompatibilní s API s existujícími knihovnami
- jako všichni hash tabulky, často poskytují konstantní čas vyhledávání prvků, ale nejhorší případ může být lineární ve velikosti kontejneru
Regulární výrazy
- Nový
<regex>
hlavičkový soubor -regulární výraz
,regex_match
,regex_search
,regex_replace
, atd. - založené na knihovně Boost RegEx[9]
- knihovna shody vzorů
C kompatibilita
C ++ je navržen tak, aby byl kompatibilní s Programovací jazyk C., ale není to přísná nadmnožina C kvůli rozdílným standardům. TR1 se pokouší sladit některé z těchto rozdílů přidáním různých záhlaví v knihovně C ++, jako je
Technická zpráva 2
V roce 2005 byla podána žádost o návrhy TR2 se zvláštním zájmem o Unicode, XML / HTML, vytváření sítí a použitelnost pro začínající programátory.Výzva k podávání návrhů TR2.
Některé z návrhů zahrnovaly:
- Vlákna [1]
- The Knihovna Asio C ++ (síť [2][3] ).
- Signály / sloty [sigc Návrh standardizace v knihovně C ++ TR2][4]
- Knihovna systému souborů Knihovna souborového systému pro TR2 - Založeno na knihovně Boost Filesystem pro dotazování / manipulaci s cestami, soubory a adresáři.
- Posilte jakoukoli knihovnu Libovolný návrh knihovny pro TR2
- Lexikální konverzní knihovna Návrh knihovny převodu pro TR2
- Nové řetězcové algoritmy Návrh nových řetězcových algoritmů v TR2
- K úplnější taxonomii algebraických vlastností numerických knihoven v TR2 ISO / IEC JTC1 / SC22 / WG21 - dokumenty 2008
- Přidání heterogenního vyhledávání srovnání do asociativních kontejnerů pro TR2 [5]
Poté, co byla vydána výzva k předkládání návrhů pro TR2, byly změněny postupy ISO, takže nebude existovat TR2. Místo toho budou vylepšení C ++ publikována v řadě technických specifikací. Některé z výše uvedených návrhů jsou již zahrnuty ve standardu C ++ nebo v návrhových verzích technických specifikací.
Viz také
- C ++ 11, standard pro programovací jazyk C ++; vylepšení knihovny byla založena na TR1
- C11 (standardní verze C), nejnovější standard pro programovací jazyk C.
- Zvyšte knihovnu, velká sbírka přenosných knihoven C ++, z nichž některé byly zahrnuty do TR1
- Standardní knihovna šablon, součást aktuální standardní knihovny C ++
Reference
- ^ „ref - 1.72.0“. www.boost.org.
- ^ "Boost.SmartPtr: Knihovna inteligentních ukazatelů - 1.72.0". www.boost.org.
- ^ „Kapitola 16. Boost.Function - 1.72.0“. www.boost.org.
- ^ „Kapitola 1. Boost.Bind - 1.72.0“. www.boost.org.
- ^ „Kapitola 1. Funkce Boost.Member - 1.72.0“. www.boost.org.
- ^ „Kapitola 1. Boost.TypeTraits - 1.37.0“. www.boost.org.
- ^ „Knihovna The Boost Tuple - Boost 1.48.0“. Archivovány od originál dne 2006-05-26. Citováno 2006-05-27.
- ^ „Kapitola 5. Boost.Array - 1.72.0“. www.boost.org.
- ^ „Boost.Regex - 1.36.0“. www.boost.org.
Zdroje
- ISO / IEC JTC1 / SC22 / WG21 - Návrh technické zprávy o rozšířeních knihovny C ++ (PDF) (Zpráva). 24. 06. 2005.
- ISO / IEC TR 19768: 2007 - Informační technologie - Programovací jazyky - Technická zpráva o rozšířeních knihovny C ++ (Zpráva). Listopad 2007.
- Becker, Peter (2006). Standardní rozšíření knihovny C ++: Výukový program a reference. Addison-Wesley Professional. ISBN 0-321-41299-0.
externí odkazy
- Efektivní C ++ Scotta Meyerse: Informace TR1 - obsahuje odkazy na dokumenty návrhu TR1, které poskytují pozadí a zdůvodnění knihoven TR1.