C++ Teknik Raporu 1 - C++ Technical Report 1
C++ Teknik Rapor 1 ( TR1 ), C++03 dil standardı için C++ standart kitaplığına eklemeler öneren bir belge olan ISO/IEC TR 19768, C++ Kitaplık Uzantılarının ortak adıdır . Eklemeler arasında normal ifadeler , akıllı işaretçiler , karma tablolar ve rastgele sayı üreteçleri bulunur . TR1 bir standart değil, bir taslak belgeydi. Ancak, tekliflerinin çoğu daha sonraki resmi standart olan C++11'in bir parçası oldu.. 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 bir mevcut uygulama oluşturmak" idi.
Rapor ilk olarak 2005 yılında taslak halinde C++ Kütüphane Uzantıları Üzerine Taslak Teknik Rapor olarak dağıtıldı , ardından 2007'de ISO/IEC TR 19768:2007 olarak bir ISO/IEC standardı olarak yayınlandı .
genel bakış
Derleyicilerin C++ standardına uymak için TR1 bileşenlerini dahil etmesine gerek yoktu, çünkü TR1 önerileri standardın kendisinin bir parçası değildi, yalnızca henüz onaylanması gereken bir dizi olası eklemeydi. Ancak TR1 çoğundan sunulmuştu Boost ve birkaç derleyici / kütüphane distribütörleri tamamını veya bileşenlerden bazıları uyguladı. TR1, C++11'de kitaplığa yapılan eklemelerin tam listesi değildir . Örneğin, C++11, TR1'de bulunmayan bir iş parçacığı destek kitaplığı içerir.
Yeni bileşenler , o sırada geçerli olan standart kitaplıktan ayırt edilmeleri için std::tr1
ad alanında tanımlandı .
Bileşenler
TR1 aşağıdaki bileşenleri içerir:
Genel yardımcı programlar
Referans sarmalayıcı - kopyalar yerine referansların algoritmalara veya işlev nesnelerine iletilmesini sağlar. Bu özellik Boost.Ref'e dayanıyordu. Şablon sınıfının bir örneğinden bir sarmalayıcı başvurusu elde edilir 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 cref
için kullanılır).
Sarmalayıcı referansları, her şeyden önce, argüman kesintisinin bir referans çıkarmayacağı durumlarda (örneğin argümanları iletirken) şablon işlevleri için yararlıdır:
#include <iostream>
#include <tr1/functional>
void f( int &r ) { ++r; }
template< class Funct, class Arg >
void g( Funct f, Arg t )
{
f(t);
}
int main()
{
int i = 0;
g( f, i ); // 'g< void(int &r), int >' is instantiated
std::cout << i << "\n"; // Output: 0
g( f, std::tr1::ref(i) ); // 'g< void(int &r), reference_wrapper<int> >' is instanced
std::cout << i << "\n"; // Output: 1
}
Akıllı işaretçiler – karmaşık durumlarda nesne kullanım ömrü yönetimini basitleştiren birkaç sınıf ekler. Üç ana sınıf eklenir:
-
shared_ptr
– referans sayılan bir akıllı işaretçi -
weak_ptr
– bunun bir çeşidishared_ptr
referans sayısını artırmaz
Teklif, Boost Smart Pointer kitaplığına dayanmaktadır.
İşlev nesneleri
Bu dört modül <functional>
başlık dosyasına eklenir :
Çok biçimli işlev sarmalayıcı ( function
) – belirtilen bir işlev çağrısı imzasını kullanan çağrılabilir herhangi bir işlevi (işlev işaretçileri, üye işlev işaretçileri ve işlev nesneleri) saklayabilir. Tür, kullanılan çağrılabilir türüne bağlı değildir. Boost.Function'a dayalı
İşlev nesnesi bağlayıcıları ( bind
) – herhangi bir parametre parametresini işlev nesnelerine bağlayabilir . İşlev bileşimine de izin verilir. Bu, standart std::bind1st
ve std::bind2nd
bağlama işlevlerinin genelleştirilmiş bir sürümüdür . Bu özellik, Boost Bind kitaplığına dayanmaktadır.
İşlev dönüş türleri ( result_of
) – bir çağrı ifadesinin türünü belirler.
Üye işlevleri ( mem_fn
) – standart geliştirme std::mem_fun
ve std::mem_fun_ref
. Üye işlevlerin işaretçilerinin işlev nesneleri olarak ele alınmasına izin verir . Boost Mem Fn kitaplığına dayalıdır.
Metaprogramlama ve tip özellikleri
Artık , , , vb. <type_traits>
gibi birçok kullanışlı özellik meta şablonunu içeren başlık dosyası var . Farklı türler arasında sorgular ve dönüşümler sağlayarak metaprogramlamayı kolaylaştırır . Teklif, Boost Type Traits kitaplığına dayanmaktadır.
is_pod
has_virtual_destructor
remove_extent
Sayısal tesisler
Rastgele sayı üretimi
- yeni
<random>
başlık dosyası –variate_generator
,mersenne_twister
,poisson_distribution
, vb. - birkaç Sözde rasgele sayı üreteci , motor ve olasılık dağılımından herhangi birini kullanarak rasgele sayılar üretmek için yardımcı programlar
Matematiksel özel fonksiyonlar
Matematiksel özel işlevler ve belirli C99 eklemeleri gibi TR1'in bazı özellikleri, TR1'in Visual C++ uygulamasına dahil edilmemiştir. Matematiksel özel işlevler kitaplığı, C++ 11'de standartlaştırılmamıştır.
Bu işlevler muhtemelen mühendislik ve bilimsel disiplinlerdeki programcıların başlıca ilgisini çekecektir.
Aşağıdaki tablo, TR1'de açıklanan 23 özel işlevin tümünü gösterir.
Fonksiyon adı | Fonksiyon prototipi | matematiksel ifade |
---|---|---|
İlişkili Laguerre polinomları | double assoc_laguerre ( işaretsiz n, işaretsiz m, çift x ); | |
İlişkili Legendre polinomları | double assoc_legendre ( işaretsiz l, işaretsiz m, çift x ); | |
Beta işlevi | çift beta ( çift x, çift y ); | |
Birinci türden tam eliptik integral | double comp_ellint_1 (çift k); | |
İkinci türden tam eliptik integral | double comp_ellint_2 (çift k); | |
Üçüncü türden tam eliptik integral | double comp_ellint_3 ( double k, double nu ); | |
Birleşen hipergeometrik fonksiyonlar | double conf_hyperg ( double a, double c, double x ); | |
Düzenli modifiye silindirik Bessel fonksiyonları | double cyl_bessel_i ( double nu, double x ); | |
Birinci türden silindirik Bessel fonksiyonları | double cyl_bessel_j ( double nu, double x ); | |
Düzensiz değiştirilmiş silindirik Bessel fonksiyonları | double cyl_bessel_k ( double nu, double x ); | |
Silindirik Neumann fonksiyonları | double cyl_neumann ( double nu, double x ); | |
Birinci türden tamamlanmamış eliptik integral | çift ellint_1 ( çift k, çift phi ); | |
İkinci türden tamamlanmamış eliptik integral | double ellint_2 (çift k, çift phi); | |
Üçüncü türden eksik eliptik integral | double ellint_3 ( double k, double nu, double phi ); | |
üstel integral | çift nokta (çift x); | |
Hermit polinomları | çift hermit ( işaretsiz n, çift x ) ; | |
hipergeometrik seri | çift hiperg ( çift a, çift b, çift c, çift x ); | |
Laguerre polinomları | double laguerre ( işaretsiz n, double x ) ; | |
Legendre polinomları | çift efsane ( işaretsiz l, çift x ); | |
Riemann zeta fonksiyonu | çift riemann_zeta (çift x); | |
Birinci türden Küresel Bessel fonksiyonları | double sph_bessel ( işaretsiz n, double x ); | |
Küresel ilişkili Legendre işlevleri | double sph_legendre (işaretsiz l, işaretsiz m, çift teta); | |
Küresel Neumann fonksiyonları | double sph_neumann ( işaretsiz n, double x ); |
Her işlevin iki ek varyantı vardır. Bir işlev adına ' f ' veya ' l ' son ekinin eklenmesi, sırasıyla üzerinde float
veya long double
değerleri üzerinde çalışan bir işlev verir . Örneğin:
float sph_neumannf( unsigned n, float x ) ;
long double sph_neumannl( unsigned n, long double x ) ;
Konteynerler
demet türleri
- yeni
<tuple>
başlık dosyası –tuple
- Boost Tuple kitaplığına dayalı
- belirsiz bir şekilde standardın bir uzantısı
std::pair
- farklı tiplerde olabilen sabit boyutlu eleman koleksiyonu
Sabit boyutlu dizi
- yeni
<array>
başlık dosyası –array
- Boost Array kitaplığından alındı
- standart gibi dinamik dizi türlerinin aksine
std::vector
Hash tabloları
- yeni
<unordered_set>
, başlık dosyaları<unordered_map>
- uyguladıkları
unordered_set
,unordered_multiset
,unordered_map
, veunordered_multimap
sınıflar, benzer üzereset
,multiset
,map
vemultimap
sırasıyla- maalesef
unordered_set
veunordered_multiset
birlikte kullanılamazset_union
,set_intersection
,set_difference
,set_symmetric_difference
, veincludes
standart kütüphane fonksiyonları, çalışma içinset
vemultiset
- maalesef
- yeni uygulama, mevcut bir kitaplıktan türetilmemiş, mevcut kitaplıklarla tam API uyumlu değil
- tüm karma tablolar gibi , genellikle öğelerin sürekli olarak aranmasını sağlar, ancak en kötü durum, kabın boyutunda doğrusal olabilir
Düzenli ifadeler
- yeni
<regex>
başlık dosyası –regex
,regex_match
,regex_search
,regex_replace
, vb. - Boost RegEx kitaplığına dayalı
- desen eşleştirme kitaplığı
C uyumluluğu
C++ , C programlama diliyle uyumlu olacak şekilde tasarlanmıştır , ancak farklı standartlar nedeniyle C'nin katı bir üst kümesi değildir. TR1, <complex>, <locale>, <cmath> vb. gibi C++ kitaplığındaki çeşitli başlıklara eklemeler yaparak bu farklılıkların bazılarını uzlaştırmaya çalışır. Bu değişiklikler, C++'ı C'nin C99 sürümüyle daha uyumlu hale getirmeye yardımcı olur. standart (C99'un tüm parçaları TR1'e dahil değildir).
Teknik Rapor 2
2005 yılında, Unicode, XML/HTML, Ağ Oluşturma ve acemi programcılar için kullanılabilirlik konularına özel ilgi gösteren bir TR2 için teklif talebi yapıldı. TR2 teklif çağrısı .
Tekliflerden bazıları şunları içeriyordu:
- Konular [1]
- Asio C ++ kütüphanesi (ağ [2] [3] ).
- Sinyaller/Yuvalar [ C++ Kitaplığında standardizasyon için sigc Önerisi TR2] [4]
- TR2 için Dosya Sistemi Kitaplığı Dosya Sistemi Kitaplığı – Yolların, dosyaların ve dizinlerin sorgulanması/manipülasyonu için Boost Dosya Sistemi Kitaplığını temel alır.
- Herhangi Bir Kitaplığı Artırın Herhangi Bir Kitaplık Önerisi TR2 için
- TR2 için Sözlüksel Dönüşüm Kitaplığı Dönüşüm Kitaplığı Önerisi
- TR2'de yeni dizi algoritmaları için Yeni Dizi Algoritmaları Önerisi
- TR2'de Sayısal Kitaplıklar için Cebirsel Özelliklerin Daha Eksiksiz Bir Taksonomisine Doğru ISO/IEC JTC1/SC22/WG21 - Belgeler 2008
- TR2 için ilişkisel kapsayıcılara heterojen karşılaştırma araması ekleme [5]
TR2 için teklif çağrısı yapıldıktan sonra ISO prosedürleri değiştirildi, dolayısıyla TR2 olmayacak. Bunun yerine, C++ geliştirmeleri bir dizi Teknik Spesifikasyonda yayınlanacaktır. Yukarıda listelenen bazı teklifler, C++ standardında veya Teknik Spesifikasyonların taslak versiyonlarında zaten yer almaktadır.
Ayrıca bakınız
- C++11 , C++ programlama dili için standart; kütüphane iyileştirmeleri TR1'e dayanıyordu
- C11 (C standart revizyonu) , C programlama dili için en yeni standart
- Boost kitaplığı , birçoğu TR1'e dahil edilmiş geniş bir taşınabilir C++ kitaplığı koleksiyonu
- Standart Şablon Kitaplığı , mevcut C++ Standart Kitaplığının bir parçası
Referanslar
Kaynaklar
- ISO/IEC JTC1/SC22/WG21 — C++ Kütüphane Uzantıları hakkında Taslak Teknik Rapor (PDF) (Rapor). 2005-06-24.
- ISO/IEC TR 19768:2007 — Bilgi teknolojisi — Programlama dilleri — C++ Kitaplık Uzantıları hakkında Teknik Rapor (Rapor). Kasım 2007.
- Becker, Peter (2006). C++ Standart Kitaplık Uzantıları: Bir Eğitim ve Referans . Addison-Wesley Profesyonel. ISBN'si 0-321-41299-0.
Dış bağlantılar
- Scott Meyers'in Etkili C++: TR1 Bilgileri – TR1 kitaplıkları için arka plan ve gerekçe sağlayan TR1 teklif belgelerine bağlantılar içerir.