2010-09-01 11 views
5

यदि आपके पास एकाधिक इंडेक्स के साथ boost::multi_index_container< > है, तो इसके ऊपर पुनरावृत्ति करने के लिए स्पष्ट रूप से कई तरीके हैं - प्रत्येक अनुक्रमणिका एक तरीका परिभाषित करती है। उदाहरण के लिए, यदि आपके पास टैग T टैग के साथ एक अनुक्रमणिका है, तो आप container.get<T>().begin() से container.get<T>().end() पर पुन: सक्रिय कर सकते हैं।बढ़ावा देने का बिंदु :: multi_index_container :: अनुक्रमणिका <Tag> :: प्रकार?

यदि आप फॉर-लूप में ऐसा करने का प्रयास करते हैं (और C++ 0x auto नहीं है), तोइटरेटर का प्रकार multi_index_container<...>::index<T>::type::iterator है। अब index<T>::type को बढ़ावा मिलेगा :: multi_index :: detail :: order_index या संरचनात्मक रूप से समकक्ष कुछ। जैसे यह iterator टाइपपीफ, और begin() विधि प्रदान करेगा।

अब मेरी सवाल है, के बाद से multi_index_container< >::index<T> केवल index<T>::type typedef करने के लिए मौजूद है, और index<T>::type जाना जाता है के सदस्यों, क्यों उन सदस्यों typedef index<T> नहीं करता है? यह आपको multi_index_container<...>::index<T>::iterator लिखने की अनुमति देगा।

इसी तरह, क्यों multi_index_container< >::index_iterator<T> पुनरावर्तक नहीं है? multi_index_container< >::index_iterator<T>::type है, लेकिन बूस्ट ने एक एम्बेडेड टाइपपीफ क्यों चुना? फिर ::type केवल अव्यवस्था को जोड़ना प्रतीत होता है।

+0

मुझे इसे हमारे कोड में देखना था क्योंकि मुझे :: प्रकार के बारे में पता नहीं था। ऐसा लगता है कि हमने उन्हें सब कुछ टाइप किया है, इसलिए यह कार्यान्वयन में दिखाई नहीं देता है। तो मुझसे कोई जवाब नहीं: मुझे इसके साथ कोई समस्या नहीं थी इसलिए मैंने कभी समझ नहीं लिया कि क्यों ... – stefaanv

उत्तर

2

व्यक्तिगत रूप से, मुझे लगता है कि यह सिर्फ एक निरीक्षण था। विशेष रूप से ऐसी गैर-तुच्छ पुस्तकालय जैसे boost::multi_index_container<T> के साथ। मुझे अक्सर कोड मिला है जो कि प्रति से पर नहीं है, लेकिन मुझे लगा कि मैं पीछे की ओर बेहतर प्रदर्शन कर सकता था।

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