2009-08-04 11 views
28

विभिन्न कंपाइलरों के पास TR1 के बारे में अलग-अलग विचार हैं। जी ++ केवल स्वीकार करने के लिए लगता है प्रकार के शामिल हैं: माइक्रोसॉफ्ट संकलक केवल स्वीकारकोई व्यक्ति TR1 कैसे शामिल करता है?

#include <tr1/unordered_map> 
#include <tr1/memory> 
... 

जबकि:

#include <unordered_map> 
#include <memory> 
... 

के रूप में मैं समझता हूँ TR1, माइक्रोसॉफ्ट रास्ता सही एक है का सवाल है।

क्या दूसरा संस्करण स्वीकार करने के लिए G ++ प्राप्त करने का कोई तरीका है? सामान्य रूप से एक पोर्टेबल तरीके से TR1 को कैसे संभालता है?

+5

TR1 वास्तव में सी ++ मानक का हिस्सा नहीं है, इसलिए इन गैर-मानक शीर्षलेख फ़ाइलों को शामिल करने का "सही" तरीका म्यूट होना चाहिए। –

उत्तर

16

अपनी मशीन पर बढ़ावा स्थापित करें।
अपनी खोज पथ में निम्न निर्देशिका जोड़ें।

< बूस्ट स्थापित निर्देशिका >/बढ़ावा देने/tr1/tr1

यहाँ boost tr1 विवरण

अब जब आप < स्मृति > आप मेमोरी है कि std :: tr1 :: की tr1 संस्करण प्राप्त शामिल

के लिए देख shared_ptr और फिर इसमें सामान्य सामान्यताओं को प्राप्त करने के लिए < मेमोरी > का प्लेटफ़ॉर्म विशिष्ट संस्करण शामिल है।

+1

+1। चूंकि टीआर 1 "इन बूस्ट क्लास को मानक में आयात करने देता है" – KitsuneYMG

+0

मैं '# शामिल" बूस्ट/tr1/unordered_map करता हूं।एचपीपी "' और यह उपलब्ध होने पर tr1 कार्यान्वयन का उपयोग करता है। –

4

शायद सबसे अच्छा तरीका केवल boost पुस्तकालयों का उपयोग करना होगा, क्योंकि कई मामलों में उनके पास TR1 सुविधाओं के समान इंटरफेस के विकल्प हैं, और केवल एक अलग (लेकिन लगातार) शीर्षलेख पथ और नामस्थान में हैं। इसका संकलन उन लोगों पर काम करने का लाभ है जिनके पास सी ++ 0x लागू करने से शुरू नहीं हुआ है। और वहां बहुत उपयोगी बूस्ट लाइब्रेरी हैं जो टीआर 1 में नहीं हैं :)

वैकल्पिक रूप से, G ++ पर, आप कमांड लाइन पर --std = gnu ++ 0x पास करने का प्रयास कर सकते हैं। यह कम से कम < unordered_set> और < unordered_map> के लिए काम करता है। फिर इसे std :: tr1:

namespace std { namespace tr1 { using namespace std; } } 

यह बुरा, स्वाभाविक रूप से उपलब्ध है। मैं इसके बजाय बूस्ट दृष्टिकोण की अत्यधिक अनुशंसा करता हूं :)

+0

-std = C++ 0x या -std = gnu ++ 0x का उपयोग नहीं करता है क्योंकि यह केवल std :: unordered_set <> उपलब्ध होगा, लेकिन std :: tr1 :: unordered_set <> नहीं। – Grumbel

+0

@Grumbel, एक बुरा हैक के साथ अपडेट किया गया है जो इसे std :: tr1 – bdonlan

3

शायद एक टैक्सी हैकी, लेकिन आप बस अपने पथ में कंपाइलर tr1 निर्देशिका जोड़ सकते हैं।

2

यदि विंडोज के तहत, सिस्टम पथ में 'tr1' निर्देशिका जोड़ें। फिर #include <memory> काम करना चाहिए।

+0

में उपलब्ध कराएगा विंडोज़ पर कंपाइलर्स सिस्टम पथ का उपयोग करते हैं और साथ ही समाधान को हल करते समय पथ भी शामिल करते हैं? –

+0

नहीं, वे नहीं करते हैं। –

2

मैंने खुद से एक ही सवाल पूछा। दुर्भाग्य से, तकनीकी रिपोर्ट यह नहीं कहती है कि हेडर को कैसे शामिल किया जाना चाहिए। यह केवल परिभाषित करता है कि एक्सटेंशन :: std :: tr1 नेमस्पेस में होना चाहिए।

12
#ifdef _WIN32 
    #include <unordered_map> 
    #include <memory> 
#else 
    #include <tr1/unordered_map> 
    #include <trl/memory> 
#endif 
+0

आपको शायद कंपाइलर पर सशर्त संकलन का आधार बनाना चाहिए, प्लेटफ़ॉर्म नहीं ('_WIN64' वास्तविक है):' #if परिभाषित (_MSC_VER) && (_MSC_VER> 1300) ', उदाहरण के लिए। – IInspectable

+0

आखिर में, tr1 को trL के रूप में गलत वर्तनी है;) –

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