C ++ Teknik Raporu 1 - C++ Technical Report 1

C ++ Teknik Raporu 1 (TR1) ortak adıdır ISO / IEC TR 19768, C ++ Kitaplık Uzantıları, bu belgeye eklemeler öneren bir belgedir. C ++ standart kitaplık için C ++ 03 dil standardı. Eklemeler şunları içerir: düzenli ifadeler, akıllı işaretçiler, karma tablolar, ve rastgele sayı üreteçleri. TR1'in kendisi bir standart değildi, aksine bir taslak belgeydi. Ancak, tekliflerinin çoğu daha sonraki resmi standardın bir parçası haline geldi, C ++ 11. C ++ 11 standartlaştırılmadan önce, satıcılar bu belgeyi uzantı oluşturmak için bir kılavuz olarak kullanıyordu. Raporun amacı "genişletilmiş bir C ++ standart kitaplığı için daha yaygın mevcut uygulama oluşturmaktı".

Rapor taslak halinde ilk kez 2005 yılında, C ++ Kitaplık Uzantıları için Taslak Teknik Rapor, daha sonra 2007 yılında ISO / IEC standardı olarak yayınlanmıştır. ISO / IEC TR 19768: 2007.

Genel Bakış

Derleyiciler C ++ standardına uymak için TR1 bileşenlerini dahil etmeye gerek yoktu, çünkü TR1 önerileri standardın kendisinin bir parçası değildi, yalnızca hala onaylanacak olan bir dizi olası eklemelerdi. Bununla birlikte, TR1'in çoğu, Boost ve birkaç derleyici / kitaplık dağıtıcısı, bileşenlerin tümünü veya bir kısmını uyguladı. TR1, içinde görünen kitaplığa yapılan eklemelerin tam listesi değil C ++ 11. Örneğin, C ++ 11, TR1'de bulunmayan bir iş parçacığı destek kitaplığı içerir.

Yeni bileşenler, std :: tr1 ad alanı bunları o zamanki standart kitaplıktan ayırmak için.

Bileşenler

TR1 aşağıdaki bileşenleri içerir:

Genel araçlar

Referans sarmalayıcı - geçmeyi sağlar Referanslar algoritmalara veya işlev nesnelerine kopyalamak yerine. Özellik, Boost.Ref'e dayanıyordu.[1] Bir sarıcı referans, şablon sınıfının bir örneğinden alınır reference_wrapper. Sarmalayıcı başvurular, C ++ dilinin normal başvurularına (‘&’) benzer. Herhangi bir nesneden bir sarmalayıcı referansı elde etmek için şablon sınıfı ref kullanılır (sabit bir referans için cref kullanıldı).

Sarmalayıcı referanslar, her şeyden önce, argüman çıkarımının bir referansı çıkarmayacağı durumlarda (örneğin, argümanları iletirken) şablon işlevleri için yararlıdır:

#Dahil etmek <iostream>#Dahil etmek <tr1/functional>geçersiz f( int &r )  { ++r; }şablon< sınıf Funct, sınıf Bağımsız değişken >geçersiz g( Funct f, Bağımsız değişken t ){  f(t);}int ana(){  int ben = 0;  g( f, ben );                   // 'g ' somutlaştırılır  std::cout << ben << " n";      // Çıktı: 0  g( f, std::tr1::ref(ben) );    // 'g >' örneklenir  std::cout << ben << " n";      // Çıktı: 1}

Akıllı işaretçiler - karmaşık durumlarda nesne ömrü yönetimini basitleştiren birkaç sınıf ekler. Üç ana sınıf eklendi:

  • shared_ptr - referans sayılan akıllı işaretçi
  • zayıf_tr - bir varyantı shared_ptr bu referans sayısını artırmaz

Teklif, Boost Smart Pointer kitaplığına dayanmaktadır.[2]

Fonksiyon nesneleri

Bu dört modül, <functional> başlık dosyası:

Polimorfik işlev sarmalayıcı (işlevi) - belirli bir işlev çağrısı imzasını kullanan herhangi bir çağrılabilir işlevi (işlev işaretçileri, üye işlev işaretçileri ve işlev nesneleri) depolayabilir. Tür, kullanılan çağrılabilir türüne bağlı değildir. Boost.Function'a göre[3]

İşlev nesnesi bağlayıcıları (bağlamak) - herhangi bir parametreyi bağlayabilir parametreleri nesneleri çalıştırmak için. İşlev kompozisyonuna da izin verilir. Bu, standardın genelleştirilmiş bir versiyonudur std :: bind1st ve std :: bind2nd bağlama işlevleri. Özellik, Boost Bind kitaplığına dayalıdır.[4]

İşlev dönüş türleri (sonucu) - bir çağrı ifadesinin türünü belirler.

Üye fonksiyonları (mem_fn) - standartta geliştirme std :: mem_fun ve std :: mem_fun_ref. İzin verir işaretçiler üyeye fonksiyonlar işlev nesneleri olarak ele alınacak. Boost Mem Fn kitaplığına dayanmaktadır.[5]

Metaprogramlama ve yazım özellikleri

Şimdi var <type_traits> gibi birçok yararlı özellik meta şablonunu içeren başlık dosyası is_pod, has_virtual_destructor, remove_extent, vb. Sorgulara ve farklı içerikler arasında dönüşüme olanak sağlayarak meta programlamayı kolaylaştırır. türleri. Teklif, Yükseltme Tipi Özellikleri kitaplığına dayanmaktadır.[6]

Sayısal tesisler

Rastgele sayı üretimi

Matematiksel özel fonksiyonlar

Matematiksel özel işlevler ve belirli C99 eklemeleri gibi bazı TR1 özellikleri, TR1'in Visual C ++ uygulamasına dahil değildir.Matematiksel özel işlevler kitaplığı C ++ 11'de standartlaştırılmamıştır.

  • eklemeler <cmath>/<math.h> başlık dosyaları - beta, efsane, vb.

Bu işlevler, mühendislik ve bilimsel disiplinlerdeki programcıların başlıca ilgisini çekecektir.

Aşağıdaki tablo, TR1'de açıklanan 23 özel fonksiyonun tümünü gösterir.

Fonksiyon adıİşlev prototipiMatematiksel ifade
İlişkili Laguerre polinomlarıçift assoc_laguerre(işaretsiz n, işaretsiz m, çift x);
İlişkili Legendre polinomlarıçift assoc_legendre(işaretsiz l, işaretsiz m, çift x);
Beta işleviçift beta(çift x, çift y);
Birinci türden tam bir eliptik integralçift comp_ellint_1(çift k);
İkinci türden tam bir eliptik integralçift comp_ellint_2(çift k);
Üçüncü türden tam bir eliptik integralçift comp_ellint_3(çift k, çift nu);
Konfluent hipergeometrik fonksiyonlarçift conf_hyperg(çift a, çift c, çift x);
Düzenli olarak değiştirilmiş silindirik Bessel fonksiyonlarıçift cyl_bessel_i(çift nu, çift x);
Birinci türden silindirik Bessel fonksiyonlarıçift cyl_bessel_j(çift nu, çift x);
Düzensiz değiştirilmiş silindirik Bessel fonksiyonlarıçift cyl_bessel_k(çift nu, çift x);
Silindirik Neumann fonksiyonları

İkinci türden silindirik Bessel fonksiyonları

çift cyl_neumann(çift nu, çift x);
Birinci türden eksik eliptik integralçift ellint_1(çift k, çift phi);
İkinci türden eksik eliptik integralçift ellint_2(çift k, çift phi);
Üçüncü türden eksik eliptik integralçift ellint_3(çift k, çift nu, çift phi);
Üstel integralçift son kullanma tarihi( Çift x ) ;
Hermite polinomlarıçift Hermit(işaretsiz n, çift x);
Hipergeometrik serilerçift Hyperg(çift a, çift b, çift c, çift x);
Laguerre polinomlarıçift Laguerre(işaretsiz n, çift x);
Legendre polinomlarıçift efsane(işaretsiz l, çift x);
Riemann zeta işleviçift riemann_zeta( Çift x ) ;
Birinci türden küresel Bessel fonksiyonlarıçift sph_bessel(işaretsiz n, çift x);
Küresel ilişkili Legendre fonksiyonlarıçift sph_legendre(işaretsiz l, işaretsiz m, çift teta);
Küresel Neumann fonksiyonları

İkinci türden küresel Bessel fonksiyonları

çift sph_neumann(işaretsiz n, çift x);

Her işlevin iki ek çeşidi vardır. Sonek 'f"Veya"l'Bir işlev adına, üzerinde çalışan bir işlev verir yüzer veya uzun çift değerler sırasıyla. Örneğin:

yüzer sph_neumannf( imzasız n, yüzer x ) ;uzun çift sph_neumannl( imzasız n, uzun çift x ) ;

Konteynerler

Tuple türleri

  • yeni <tuple> başlık dosyası - demet
  • Boost Tuple kitaplığına dayalı[7]
  • belirsiz bir şekilde standardın bir uzantısı std :: çift
  • farklı olabilecek sabit boyutlu eleman koleksiyonu türleri

Sabit boyutlu dizi

  • yeni <array> başlık dosyası - dizi
  • Boost Array kitaplığından alınmıştır[8]
  • standart gibi dinamik dizi türlerinin aksine std :: vektör

Hash tabloları

  • yeni <unordered_set>, <unordered_map > başlık dosyaları
  • uygularlar sırasız_set, unordered_multiset, unordered_map, ve unordered_multimap benzer sınıflar Ayarlamak, çoklu set, harita, ve çoklu harita, sırasıyla
    • ne yazık ki, sırasız_set ve unordered_multiset ile kullanılamaz set_union, set_intersection, set_difference, set_symmetric_difference, ve içerir için çalışan standart kitaplık işlevleri Ayarlamak ve çoklu set
  • yeni uygulama, mevcut bir kitaplıktan türetilmemiş, mevcut kitaplıklarla tamamen API uyumlu değil
  • hepsi gibi karma tablolar sık sık sağlar sabit zaman elemanların aranması, ancak en kötü durum kabın boyutunda doğrusal olabilir

Düzenli ifadeler

  • yeni <regex> başlık dosyası - normal ifade, regex_match, regex_search, regex_replace, vb.
  • Boost RegEx kitaplığına göre[9]
  • desen eşleştirme kitaplığı

C uyumluluğu

C ++ ile uyumlu olacak şekilde tasarlanmıştır C programlama dili, ancak farklı standartlar nedeniyle C'nin katı bir üst kümesi değildir. TR1, C ++ kitaplığındaki , , , vb. Gibi çeşitli başlıklara eklemeler yoluyla bu farklılıkların bazılarını uzlaştırmaya çalışır. Bu değişiklikler, C ++ 'yı daha uyumlu hale getirmeye yardımcı olur. C99 C standardının versiyonu (C99'un tüm parçaları TR1'e dahil değildir).

Teknik Rapor 2

2005 yılında, Unicode, XML / HTML, Networking ve acemi programcılar için kullanılabilirlik konularına özel ilgi gösterilerek bir TR2 için teklif talebi yapıldı.TR2 teklif çağrısı.

Önerilerden bazıları şunları içeriyordu:

TR2 için teklif çağrısı yapıldıktan sonra, ISO prosedürleri değiştirildi, yani TR2 olmayacak. Bunun yerine, C ++ geliştirmeleri bir dizi Teknik Şartnamede yayınlanacaktır. Yukarıda listelenen tekliflerden bazıları halihazırda C ++ standardına veya Teknik Şartnamenin taslak sürümlerine dahil edilmiştir.

Ayrıca bakınız

Referanslar

  1. ^ "ref - 1.72.0". www.boost.org.
  2. ^ "Boost.SmartPtr: Akıllı İşaretçi Kitaplığı - 1.72.0". www.boost.org.
  3. ^ "Bölüm 16. Boost.Function - 1.72.0". www.boost.org.
  4. ^ "Bölüm 1. Boost.Bind - 1.72.0". www.boost.org.
  5. ^ "Bölüm 1. Boost.Member İşlevi - 1.72.0". www.boost.org.
  6. ^ "Bölüm 1. Boost.TypeTraits - 1.37.0". www.boost.org.
  7. ^ "The Boost Tuple Library - Boost 1.48.0". Arşivlenen orijinal 2006-05-26 tarihinde. Alındı 2006-05-27.
  8. ^ "Bölüm 5. Boost.Array - 1.72.0". www.boost.org.
  9. ^ "Boost.Regex - 1.36.0". www.boost.org.

Kaynaklar

Dış bağlantılar