2013-04-03 3 views
6

C++ में 11, यह अब मान्य सिंटैक्स है:सी ++ टेम्पलेट्स कोण ब्रैकेट्स Pitfall - सी ++ 11 फिक्स क्या है?

vector<vector<float>> MyMatrix; 

जबकि पहले यह इस प्रकार लिखा जाता था (अंतरिक्ष नोटिस):

vector<vector<float> > MyMatrix; 

मेरा प्रश्न क्या है ठीक करें कि मानक संस्करण को पहले संस्करण की अनुमति देने के लिए उपयोग किया जाता है?

क्या यह >> के बजाय टोकन बनाने जैसा ही हो सकता है? यदि ऐसा नहीं है, तो इस दृष्टिकोण के साथ क्या काम नहीं करता है?

मुझे लगता है कि myTemplate< x>>3 > जैसे फॉर्म एक गैर-समस्या हैं, क्योंकि आप myTemplate<(x>>3)> करके उन्हें असंबद्ध कर सकते हैं।

+1

'>' पहले से * एक टोकन है लेकिन पार्सर लालची था और लालची था। इसलिए फिक्स अलग दिखना चाहिए। - एक संभावना निश्चित रूप से '>>' * नहीं * टोकन बनना होगा। –

+2

मुझे लगता है कि आप §14.2.3 के लिए देख रहे हैं: * "टेम्पलेट-तर्क-सूची को पार्स करते समय, पहले गैर-नेस्टेड> ऑपरेटर से अधिक की बजाय अंतिम डिलीमीटर के रूप में लिया जाता है। इसी प्रकार, पहले गैर- नेस्टेड >> को लगातार दो लेकिन विशिष्ट> टोकन के रूप में माना जाता है, जिसमें से पहला टेम्पलेट-तर्क-सूची के अंत के रूप में लिया जाता है और टेम्पलेट-आईडी पूरा करता है। "* – Zeta

+2

" मानक क्या है पहले संस्करण की अनुमति दें "- मेरा मानना ​​है कि इसका _ _ मानक_ के साथ कुछ लेना देना नहीं है। मेरा मतलब है - कार्यान्वयन। मेरा मानना ​​है कि यह एक संकलक का निर्णय है कि इस आवश्यकता को कैसे कार्यान्वित किया जाए, _ मानक_ द्वारा मजबूर किया गया। –

उत्तर

12

यह टेम्पलेट तर्कों को पार्स करते समय पार्सिंग नियमों में एक विशेष मामला जोड़कर तय किया गया है।

सी ++ 11 14.2/3: जब एक टेम्पलेट तर्क-सूची, पहली गैर नेस्टेड > बजाय एक ऑपरेटर अधिक से अधिक न खत्म होने वाली परिसीमक के रूप में लिया जाता है पार्स करने। इसी तरह, पहले गैर-नेस्टेड >> को लगातार दो लेकिन विशिष्ट > टोकन के रूप में माना जाता है, जिनमें से पहला टेम्पलेट-तर्क-सूची के अंत के रूप में लिया जाता है और टेम्पलेट-आईडी पूरा करता है।

+1

यह एक दोष की तरह दिखता है। आईआईआरसी, इरादा था कि 'टेम्पलेट कक्षा एक्स {} जैसे कुछ; एक्स <(10 >> 2)> '(अतिरिक्त कोष्ठक के साथ) कानूनी होगा। –

+2

@JamesKanze Isn 'जो "गैर-नेस्टेड" भाग से ढका हुआ है? – Norswap

+0

मुझे अपना दूसरा प्रश्न दोबारा दोहराएं: उन्होंने '>>' टोकन क्यों नहीं छोड़ा, और बस हर जगह दो '> 'टोकन का उपयोग करें, सही-शिफ्ट की आवश्यकता है? यह एक सरल फिक्स की तरह दिखता है। – Norswap