C ++ 11 के साथ कौन सी बूस्ट ओवरलैप होती है?


191

मैंने कई वर्षों पहले अपने सी ++ कौशल को शेल्फ पर रखा था और अब ऐसा लगता है, जब मुझे फिर से उनकी आवश्यकता होती है, तो परिदृश्य बदल गया है।

हमें अब C ++ 11 मिल गया है, और मेरी समझ यह है कि यह कई बूस्ट फीचर को ओवरलैप करता है।

क्या कुछ सारांश है, जहां वे झूठ बोलते हैं, जो कि बूस्ट लाइब्रेरी विरासत बनने जा रही है, जिनमें से सी + + 11 को बढ़ावा देने के बजाय उपयोग करने की सिफारिश की गई है और जो बेहतर नहीं है?


4
टीआर 1 पुस्तकालय को लागू करने वाले पहले बूस्ट में से एक था। चूंकि अब यह मानक में है, इसलिए आपको मानक संस्करण पसंद करना चाहिए। Boost.Lambda भी अब वास्तविक लैम्ब्डा द्वारा प्रतिस्थापित की तरह है।
केरेक एसबी

6
विकिपीडिया सी ++ 11 पर लेख सबसे परिवर्तन का एक अच्छा सारांश है।
कुछ प्रोग्रामर

जवाबों:


285

C ++ 11 भाषा सुविधाओं या पुस्तकालयों द्वारा बदली जाने योग्य

TR1 ( यदि वे TR1 लाइब्रेरी हैं तो उन्हें प्रलेखन में चिह्नित किया गया है )

C ++ 11 से वापस पोर्ट की गई विशेषताएं:

C ++ 17 भाषा सुविधाओं द्वारा बदली जाने योग्य:

मानक टीम अभी भी इस पर काम कर रही है:

एमपीएल के एक बड़े हिस्से को वैरेडिक टेम्प्लेट का उपयोग करके नीचे छंटनी या हटाया जा सकता है। लेक्सिकल कास्ट के कुछ सामान्य उपयोग के मामलों को std :: to_string और std :: sto X से बदला जा सकता है ।

कुछ बूस्ट लाइब्रेरी C ++ 11 से संबंधित हैं, लेकिन कुछ और एक्सटेंशन भी हैं, जैसे Boost.Functional / Hash में hash_combine और संबंधित फ़ंक्शन C ++ 11 में नहीं पाए जाते हैं, Boost.Chrono में I / O और गोलाई है और कई अन्य घड़ियां हैं, आदि ताकि आप अभी भी वास्तव में उन्हें खारिज करने से पहले बूस्ट पर एक नज़र रखना चाहते हैं।


1
सूची में जोड़ें Boost.Chrono , Boost.Exception और Boost.Swap
१।

9
ध्यान दें कि Boost.Lambda (या बल्कि, Boost.Phoenix 'lambdas), अभी भी बहुरूपी lambdas के लिए उपयोगी हैं।
Xeo

2
अच्छी सूची है, हालांकि मुझे विश्वास नहीं है कि std::unique_ptrयह TR1 का हिस्सा है (क्योंकि इसे स्थानांतरित शब्दार्थों की आवश्यकता है)
निमो

1
@ गिल्डरन: बूस्ट.क्रोनो <chrono> की तुलना में बहुत अधिक कार्य प्रदान करता है। Boost.Exception - केवल N2179 प्रासंगिक है।
kennytm

2
@ नीमो: हाँ। केवल std :: tr1 :: shared_ptr TR1 का हिस्सा है, और const std :: unique_ptr बढ़ावा देने के उपयोग के मामलों की जगह लेता है :: scoped_ptr और बढ़ावा देना :: scoped_array
kennytm

55

वास्तव में, मुझे नहीं लगता कि बढ़ावा देने वाली लाइब्रेरी विरासत बनने जा रही है।

हाँ, आप का उपयोग करने के लिए सक्षम होना चाहिए std::type_traits, regex, shared_ptr, unique_ptr, tuple<>, std::tie, std::beginबूस्ट Typetraits के बजाय / उपयोगिता, Smartpointer बूस्ट, बूस्ट टपल, रेंज पुस्तकालयों को बढ़ावा, लेकिन वहाँ व्यवहार में 'स्विच' के लिए कोई वास्तविक आवश्यकता होना चाहिए जब तक कि आप अधिक से आगे बढ़ रहे हैं आपका कोड c ++ 11 के लिए।

इसके अलावा, मेरे अनुभव में, stdइनमें से अधिकांश के संस्करण कुछ कम विशेषता वाले हैं। उदाहरण के लिए AFAICT में मानक नहीं है

  • Perl5 नियमित अभिव्यक्ति
  • call_traits
  • कुछ रेगेक्स इंटरफ़ेस सदस्य (जैसे कि bool boost::basic_regex<>::empty()) और इंटरफ़ेस इंटरफ़ेस अंतर
    • यह बूस्ट के बाद से अधिक काटता है, बूस्ट एक्सपेक्टिव के साथ बिल्कुल मेल खाता है
    • और यह बूस्ट स्ट्रिंग एल्गोरिदम के साथ बहुत अधिक अच्छी तरह से खेलता है जाहिर है, बाद में मानक समकक्षों (अभी तक) नहीं है?
  • TMP (बूस्ट फ्यूजन) से संबंधित कई बातें
  • आलसी, अभिव्यक्ति टेम्पलेट-आधारित लंबदा; उनके पास अपरिहार्य लाभ हैं कि वे आज पॉलीमॉर्फिक हो सकते हैं , जैसा कि C ++ 11 के विपरीत है। इसलिए वे अक्सर अधिक रसीला हो सकते हैं:

     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);
    

    सबसे निश्चित रूप से, यह अभी भी C ++ 11 लैम्ब्डा पर कुछ अपील है (वापसी के प्रकारों के साथ, स्पष्ट कैप्चरिंग और घोषित पैरामीटर)।

इसके अलावा, बूस्ट के लिए एक बड़ी भूमिका है, ठीक C ++ 03 से C ++ 11 तक पथ-वार प्रवास को सुविधाजनक बनाने और C ++ 11 और C ++ 03 कोडबेस को एकीकृत करने में। मैं विशेष रूप से सोच रहा हूँ

  • बूस्ट ऑटो (BOOST_AUTO)
  • बूस्ट यूटिलिटी ( boost::result_of<>और संबंधित)
  • बूस्ट फोर्च (BOOST_FOREACH)
  • भूल न करें: बूस्ट मूव - जो एक सिंटैक्स के साथ मूव शब्दार्थ के साथ कक्षाएं लिखना संभव बनाता है जो बूस्टर 1_48 + और सी ++ 11 संकलक के साथ C ++ 03 संकलक पर समान रूप से संकलित करेगा।

बस मेरी $ 0.02

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.