समस्या आपके पास है कि भले ही T *
परोक्ष एक T const *
में बदला जा सकता है, टेम्पलेट प्रणाली नहीं है कि "पता" है, तो एक whatever<T *>
और whatever<T const *>
पूरी तरह से असंबंधित प्रकार के होते हैं, और वहाँ एक से कोई अंतर्निहित रूपांतरण है दूसरे को।
समस्या से बचने के लिए, शायद मैं संग्रह को पार करने से बचूंगा। इसके बजाय मैं समारोह में इटरेटर की एक जोड़ी लेता। list<A *>::iterator
को list<A *>::const_iterator
पर स्पष्ट रूप से परिवर्तित किया जा सकता है। उस मामले के लिए, मैं शायद फ़ंक्शन को एक टेम्पलेट बना दूंगा, इसलिए यह मनमाना प्रकार के इटरेटर ले सकता है।
यह आपको काफी परेशानी का एक सा बचाने के लिए संभावना है - एक list
केवल शायद ही कभी कंटेनर का एक अच्छा विकल्प है, इसलिए वहाँ इस बात की संभावना है कि किसी दिन आप list<A *>
से vector<A *>
या शायद deque<A *>
को बदलना चाहते हैं जाएगा - - और यदि आप अपना काम सामान्य बनाते हैं, तो आप फ़ंक्शन को फिर से लिखने के बिना ऐसा करने में सक्षम होंगे।
स्रोत
2011-01-24 20:53:45
क्या आपने सूची को पास करने की कोशिश की है? यदि हां, तो आपको क्या मिला? – Oswald
@ ओस्वाल्ड, कुछ भयानक टेम्पलेट कास्टिंग त्रुटि – vondip
कुछ त्रुटि जैसे 'std :: सूची <ए *, std :: आवंटक >' गैर-स्केलर प्रकार 'std :: सूची> 'अनुरोध किया गया'? –
James