Hangi Boost özellikleri C ++ 11 ile çakışıyor?


192

C ++ becerilerimi birkaç yıl önce rafa koydum ve şimdi tekrar ihtiyacım olduğunda manzara değişti.

Şimdi C ++ 11 var ve benim anlayışım birçok Boost özelliği ile örtüşüyor.

Bu çakışmaların bulunduğu yerlerde, hangi Boost kütüphanelerinin eski olacağı, hangi C ++ 11 özelliklerinin hangilerini artırmak yerine kullanacakları ve hangilerinin daha iyi olmayacağı konusunda bir özet var mı?


4
Boost, TR1 kütüphanesini ilk uygulayanlardan biriydi. Bu artık standartta olduğundan, standart sürümü tercih etmelisiniz. Lambda'nın yerine artık bir çeşit gerçek lambdalar geliyor.
Kerrek SB

6
Vikipedi C ++ 11 makale çoğu değişikliklerin iyi bir özeti var.
Bazı programcı dostum

Yanıtlar:


286

C ++ 11 dil özellikleri veya kitaplıkları ile değiştirilebilir

TR1 (bunlar TR1 kütüphaneleri ise belgelerde işaretlenmiştir )

C ++ 11'den taşınan özellikler:

  • Atomik ← std :: atomik
  • Chrono ← <chrono> (aşağıya bakın)
  • Taşı ← Rvalue referansları

C ++ 17 dil özellikleri ile değiştirilebilir:

Standart ekip hala üzerinde çalışıyor:

MPL'nin büyük bir kısmı varyasyon şablonları kullanılarak kesilebilir veya çıkarılabilir. Lexical cast'in bazı yaygın kullanım durumları std :: to_string ve std :: sto X ile değiştirilebilir .

Bazı Boost kütüphaneleri C ++ 11 ile ilişkilidir, ancak bazı uzantılar da vardır, örn. Boost.Functional / Hash hash_combine ve C ++ 11, Boost.Chrono'da bulunmayan ilgili işlevleri içerir I / O ve yuvarlama ve diğer birçok saatler vardır, Bu nedenle, gerçekten reddetmeden önce takviye olanlara bir göz atmak isteyebilirsiniz.



9
Boost.Lambda'nın (veya daha doğrusu Boost.Phoenix 'lambdaslarının) polimorfik lambdalar için hala yararlı olduğunu unutmayın.
Xeo

2
Güzel bir liste, inanmama rağmen std::unique_ptrTR1'in bir parçası (hareket semantiği gerektirdiğinden)
Nemo

1
@ildjarn: Boost.Chrono <chrono> 'dan çok daha fazla işlev sunar. Boost.Exception - yalnızca N2179 geçerlidir.
kennytm

2
@Nemo: Evet. Sadece std :: tr1 :: shared_ptr, TR1'in bir parçasıdır ve const std :: unique_ptr, boost :: scoped_ptr ve boost :: scoped_array
kennytm'nin

56

Aslında, destek kütüphanelerinin miras olacağını düşünmüyorum.

Evet, kullanmak gerekir std::type_traits, regex, shared_ptr, unique_ptr, tuple<>, std::tie,std::begin daha hareketli sürece yerine Boost Typetraits arasında / Programı,, Tuple Boost, Smartpointer Boost Menzil kütüphaneleri Boost ama pratikte 'anahtar' için gerçek bir ihtiyaç olmalıdır kodunuzu c ++ 11'e çevirin.

Ayrıca, tecrübelerime göre, bunların stdçoğunun sürümleri biraz daha az özelliklidir. Örneğin AFAICT standart yok değil var

  • Perl5 düzenli ifadeleri
  • call_traits
  • Belirli regex arayüz üyeleri (gibi bool boost::basic_regex<>::empty()) ve diğer arayüz farklılıkları
    • Boost arayüzü Boost Xpressive ile tam olarak eşleştiği için bu daha fazla ısırır
    • ve Boost String Algoritmaları ile çok daha güzel oynuyor Açıkçası, ikincisinin standart muadilleri yok (henüz?)
  • TMP (Boost Fusion) ile ilgili birçok şey
  • Tembel, ifade şablonu tabanlı lambdalar; C ++ 11'in aksine bugün polimorfik olabilmeleri için kaçınılmaz faydaları var . Bu nedenle genellikle daha özlü olabilirler:

     std::vector<int> v = {1,2,-9,3};
    
     for (auto i : v | filtered(_arg1 >=0))
         std::cout << i << "\n";
    
     // or:
     boost::for_each(v, std::cout << _arg1);

    Kesinlikle, bu hala C ++ 11 lambdas üzerinde biraz çekicidir (sondaki dönüş türleri, açık yakalama ve beyan edilen parametrelerle).

Ayrıca, Boost için tam olarak C ++ 03'ten C ++ 11'e yol geçişini kolaylaştırmak ve C ++ 11 ve C ++ 03 kod tabanlarını entegre etmede BÜYÜK bir rol var. Özellikle düşünüyorum

  • Otomatik Yükseltme (BOOST_AUTO)
  • Takviye Yardımcı Programı ( boost::result_of<>ve ilgili)
  • Foreach'u Artır (BOOST_FOREACH)
  • Unutmayın: Boost Move - Boost 1_48 + ve C ++ 11 derleyicileri ile C ++ 03 derleyicilerinde eşit derecede iyi derlenecek bir sözdizimi ile hareket semantiği olan sınıflar yazmayı mümkün kılar.

Sadece benim 0.02 $

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.