2010-08-17 13 views
5

मैं वर्तमान में विजुअल स्टूडियो 2008 से 2010 तक माइग्रेट कर रहा हूं। मेरा सॉफ़्टवेयर बूस्ट और इसकी टीआर 1 सुविधाओं का भारी उपयोग करता है। अब मुझे बहुत सारी कंपाइलर त्रुटियां मिलती हैं, क्योंकि वीसी 10 में इसका स्वयं का टीआर 1 कार्यान्वयन है।टीआर 1 - कौन सा बेहतर है?

मुझे पता है कि मैं _HAS_CPP0X स्विच के साथ माइक्रोसॉफ्ट के टीआर 1 कार्यान्वयन को अक्षम कर सकता हूं (here देखें), लेकिन मुझे यकीन नहीं है कि यह भविष्य में दिलचस्प अन्य सुविधाओं को भी अक्षम कर सकता है।

तो, मुझे आश्चर्य है कि TR1 का बेहतर कार्यान्वयन कौन सा है: बूस्ट या माइक्रोसॉफ्ट से एक? क्या कोई अंतर है? क्या माइक्रोसॉफ्ट कार्यान्वयन को अक्षम करने से कोई नुकसान होता है?

+0

यह नहीं कि यह वह उत्तर है जिसे आप ढूंढ रहे हैं ... यदि आप Microsoft tr1 को अक्षम करते हैं, तो आप बिना किसी बढ़ावा के संकलित नहीं कर सकते हैं। यदि आप बूस्ट का उपयोग करते हैं, तो आपको आश्वासन दिया जा सकता है कि आपके पास एक स्थिर अपग्रेड पथ होगा, और आपका कोड बाहरी एमएसवीसी को संकलित करेगा। उस, और बूस्ट में टीआर 1 की तुलना में अधिक सुविधाएं हैं :) –

+0

सटीक त्रुटि, डुप्लिकेट परिभाषाएं क्या हैं? – MSalters

+0

हां, सटीक त्रुटि डुप्लिकेट परिभाषा है। इसमें एडीएल के साथ कुछ भी करना है।यदि मैं बाध्य या _1 (std :: bind और std :: tr1 :: प्लेसहोल्डर्स :: _ 1) के हर अवसर को अर्हता प्राप्त करता हूं तो कोड जल्द ही बहुत बुरा हो जाएगा :) –

उत्तर

1

यदि आपका कोड वीसी 10 की मानक लाइब्रेरी से संकलित नहीं है, तो यह संकेत दे सकता है कि यह मानक-अनुरूप नहीं है। वीसी 10 में मानक लाइब्रेरी डिनक्यूमवेयर से आती है, और मानक लाइब्रेरी को लागू करने की बात आने पर ये लोग खराब नहीं होते हैं। (पीजेपी lib कार्यकारी समूह की कुर्सी थी।) मैं वीसी-विशिष्ट समस्या के रूप में इसे खारिज करने से पहले, प्रत्येक मुद्दे पर बहुत बारीकी से देखता हूं, ताकि आप भविष्य में संगत न हों।

इसके अलावा, TTBOMK, VC10 सिर्फ TR1 के साथ आता है नहीं है, लेकिन सी ++ 1x साथ (जैसे, std::shared_ptrstd::tr1::shared_ptr के बजाय, ICBWT), इसलिए बढ़ावा और VC10 के पुस्तकालयों वास्तव में पूरी तरह से तुलना नहीं कर रहे हैं।

+0

क्या आपने अपनी सूची कार्यान्वयन की जांच की है? मैंने देखा कि कोई बनाम 2010 के साथ नहीं आया था, लेकिन इससे पहले सभी को splicing के लिए रैखिक जटिलता थी। – leiz

+1

@leiz: नहीं, मैंने नहीं किया है। (मैंने शायद ही कभी एक सूची का उपयोग करके समाप्त हो गया, भले ही मैंने ऐसा करना शुरू किया। आमतौर पर, वेक्टर बेहतर हो जाता है।) लेकिन मैं कह रहा था कि, जब कोड इसका उपयोग भी नहीं करता है, तो मैं इसे खारिज करने से पहले वास्तव में बारीकी से देखता हूं यह कोड के साथ किसी समस्या के बजाय लाइब्रेरी कार्यान्वयन के साथ एक समस्या के रूप में, क्योंकि, _generally_, उनका कार्यान्वयन बहुत अच्छा है। इसका मतलब यह नहीं है कि, मुझे लगता है कि डिनक्यूमवेयर के कार्यान्वयन में __ में कोई समस्या नहीं है। डंकमवेयर मनुष्यों द्वारा चलाया जाता है। – sbi

+0

@leiz: C++ 0x अब निर्दिष्ट करता है कि 'splice' ओ (1) होना चाहिए और सूची के लिए' आकार 'को ओ (एन) होना चाहिए (क्योंकि दोनों असंगत हैं), मुझे नहीं पता कि यह है या नहीं सी ++ 03 के मामले में था। –

0

सबसे पहले:
आपको बूस्ट और टीआर 1 पक्ष का उपयोग करने में सक्षम होना चाहिए। अगर सब कुछ ठीक से कॉन्फ़िगर किया गया है और आप using namespace के साथ गड़बड़ नहीं कर रहे हैं तो आपको कोई त्रुटि नहीं मिलेगी।

सी ++ 11auto कीवर्ड (more info) या उनके घोषणा (more info) कि बूस्ट प्रदान नहीं कर सकते दौरान वर्ग के प्रारंभ विशेषताओं जैसी सुविधाओं के प्रदान करता है।

दूसरी तरफ बूस्ट सी ++ 11 सुविधाओं के कार्यान्वयन के मुकाबले बहुत कुछ प्रदान करता है। अनिवार्य रूप से बूस्ट पुस्तकालयों का एक संग्रह है जिसे सी ++ मानक में जोड़ा जाना माना जाता है।

यह सुविधाओं जो दोनों प्रदान करते हैं (जैसे shared_ptr) मैं बूस्ट का उपयोग कर की सिफारिश करेंगे की बात आती है:

  • बूस्ट compilers के साथ संकलित जो कुछ सी ++ 11 सुविधाओं का समर्थन नहीं करते
  • आप एक स्पष्ट निर्भरता बजाय सिर्फ पर सी ++ 11 (जो सबसे compilers अलग लागू)
  • बूस्ट डेटाटाइप्स (जैसे shared_ptr) के प्रसारण के serialization जैसे अन्य बूस्ट विशेषताओं के साथ संगत कर रहे हैं।

मेरे सुझाव उपयोग करने के लिए सी ++ 11 सिर्फ अगर आप पूरी तरह से इसकी आवश्यकता है और अन्य सभी मामलों में बढ़ावा है।

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