2012-02-08 12 views
19

उदाहरण boost::function के लिए, लगभग std::function को पूरी तरह से ले जाया गया एक ही boost::shared_ptrक्या सी ++ 11 मानक कुछ बढ़ावा देता है :: कोई भी?

साथ है लेकिन मैं std::any नहीं मिल सकता है? क्या इसका नाम बदला गया था या किसी भी कारण से इसे नए मानक में नहीं रखा गया था?

+13

संख्या (और भराव) –

+0

नहीं बढ़ावा में सब कुछ एसटीडी लेकिन कुछ भी नहीं है इसे का उपयोग करने से रोकता है स्थानांतरित कर दिया गया बढ़ावा मेंमुझे लगता है कि कुछ बढ़ावा पुस्तकालयों को सी ++ 11 के लिए फिर से लिखा जा सकता है, कुछ को पूरी तरह से अनावश्यक होने के कारण हटाया जा सकता है, हालांकि वे शायद पिछड़े संगतता के लिए उपलब्ध रहेंगे। – CashCow

उत्तर

15

बूस्ट से प्रत्येक लाइब्रेरी इसे मानक में नहीं बनाती है (और यहां तक ​​कि जिनके पास घटकों को हटाया जा सकता है)। आम तौर पर जब कम्युनिटी लाइब्रेरी में जोड़ने की बात आती है तो कमेटी बहुत रूढ़िवादी होती है (चूंकि समावेशन एक गलती थी (.e.g। क्योंकि एक बेहतर विकल्प है) बाद में किसी चीज़ को हटा देना असंभव है।

boost::function और boost::shared_ptr जहां कहीं भी शामिल होने के लिए बहुत कुछ दिया गया है क्योंकि वे पहले से ही tr1 का हिस्सा हैं। दूसरी ओर boost::any कटौती नहीं किया। हालांकि इसे बाद में मानक पुस्तकालय में शामिल किया जा सकता है (उदाहरण के लिए अगली तकनीकी रिपोर्ट में, here देखें)। जबकि boost::any अच्छा है, मैं इसे उतना महत्वपूर्ण नहीं मानूंगा जितना कि उदा। shared_ptr

समापन: boost::any, के सी ++ 11 हिस्सा नहीं है के बाद से समिति किसी भी दबाने शामिल करने के लिए यह

+2

शायद आप 17 उत्तरों को प्रतिबिंबित करने के लिए अपना उत्तर अपडेट कर सकते हैं :) –

3

मुझे लगता है कि डिफ़ॉल्ट स्थिति यह थी कि एक पुस्तकालय नहीं में शामिल किया जाएगा की जरूरत नहीं देखा था नया मानक जब तक इसे शामिल करने के लिए सबमिट नहीं किया गया था और फिर समिति को पारित किया गया।

मुझे यकीन नहीं है कि अगर बढ़ावा :: कोई भी सबमिट किया गया था। शायद ऩही। हालांकि आप अभी भी boost :: किसी भी का उपयोग कर सकते हैं।

मेरा अनुमान है कि सी ++ 11 बूस्ट लाइब्रेरीज़ को फिर से लिखा जाएगा, कुछ को अनावश्यक माना जाएगा और अन्य को सी ++ 11 शैली में सी ++ के साथ लिखे गए अर्थात् सूचियों, प्रारंभिक सूचियों और ऑटो का उपयोग करने के लिए बदला जाएगा। +11 विशेषताएं।

सबसे अधिक संभावना है कि नई पुस्तकालय सभी सी ++ 11 में होंगी लेकिन मौजूदा बूस्ट पैकेज कुछ समय के लिए उपलब्ध रहेगा क्योंकि कई लोग अभी तक सी ++ 11 कंपाइलर्स पर स्विच नहीं होंगे। मैं यह भी अनुमान लगाऊंगा कि सभी मुख्य कंपाइलर्स द्वारा लागू किए गए सी ++ 11 की केवल विशेषताएं ही पैकेज में जाएंगी।

यह शायद स्टैक ओवरफ्लो की तुलना में प्रोग्रामर के लिए एक प्रश्न है, और comp.std.C++ के लिए भी बेहतर है। मॉडरेटेड और मेलिंग सूचियों को बढ़ावा देना।

16

चूंकि सवाल पूछा गया था, इसलिए हम सीडी + प्रयोगात्मक :: किसी भी optional फीचर के रूप में सी ++ 14 मानक से बाहर निकल गए हैं।

यह कम से कम जीसीसी 5.1 में implemented था।

तब से सुविधा सी ++ 17 में मानकीकृत हुई जिसके परिणामस्वरूप std::any था। एक प्रकार-सुरक्षित संघ के लिए सी ++ 17 के std::variant को भी देखें जो या तो सीमित ज्ञात प्रकार के विकल्प में से एक है, या खाली है (टिप के लिए धन्यवाद रेमी-लेबेउ)।

+2

['std :: variant'] (http://en.cppreference.com/w/cpp/utility/variant) (' boost :: variant' के समान)) को भी मानकीकृत किया गया है और सी ++ 17 में दिखाई देगा। –

संबंधित मुद्दे