मैं इस तरह एक प्रोटोटाइप के साथ कुछ कार्यों लिखा है:संदर्भ के द्वारा सी ++ इटरेटर पास करने में क्या गड़बड़ है?
template <typename input_iterator>
int parse_integer(input_iterator &begin, input_iterator end);
विचार यह है कि फोन करने वाले पात्रों की एक सीमा प्रदान करेंगे और समारोह एक पूर्णांक मान के रूप में पात्रों की व्याख्या और यह वापसी होगी, आखिरी इस्तेमाल किए गए चरित्र से पहले एक बार छोड़ना। उदाहरण के लिए:
std::string sample_text("123 foo bar");
std::string::const_iterator p(sample_text.begin());
std::string::const_iterator end(sample_text.end());
int i = parse_integer(p, end);
यह foo
से पहले अंतरिक्ष में 123 और p
"की ओर इशारा करते" करने के लिए i
सेट छोड़ना होगा।
मुझे तब से बताया गया है (स्पष्टीकरण के बिना) कि संदर्भ के अनुसार एक इटरेटर पास करने के लिए यह खराब रूप है। क्या यह खराब रूप है? यदि हां, तो क्यों?
"आप किसी अन्य चीज़ द्वारा लौटाए गए इटरेटर को या v.begin() की तरह जेनरेट नहीं कर पाएंगे, क्योंकि वे अस्थायी होंगे।" यही कारण है कि सी ++ 0x रैवल्यू संदर्भ हैं। :) – Zifre
मुझे आउटपुट इटरेटर विचार पसंद है यह बहुत stl-esque – iain
एक और विकल्प (देर से पाठकों के लिए): एक :: std :: pair को लौट रहा है, जैसा कि :: std :: map :: insert करता है । –
Aconcagua