मैं एक समारोह है जहां मैं एक कंटेनर जो तार (जैसे vector<string>
, set<string>
, list<string>
) और, एक शुरुआत इटरेटर और एक अंत इटरेटर को देखते हुए, प्रसंस्करण इटरेटर रेंज के माध्यम से जाने धारण तार।स्वीकार stl_container_type <string> की टेम्प्लेटेड पैरामीटर :: iterator
वर्तमान में समारोह इस तरह घोषित किया जाता है:
template< typename ContainerIter>
void ProcessStrings(ContainerIter begin, ContainerIter end);
अब इस किसी भी प्रकार जो operator*
को लागू करने की अंतर्निहित इंटरफेस के अनुरूप स्वीकार करेंगे, उपसर्ग operator++
और जो कुछ अन्य कॉल समारोह शरीर में हैं।
template< typename Container<string>::iterator>
void ProcessStrings(Container<string>::iterator begin, Container<string>::iterator end);
ताकि मैं इस तरह के रूप में इसका इस्तेमाल कर सकते हैं::
vector<string> str_vec;
list<string> str_list;
set<SomeOtherClass> so_set;
ProcessStrings(str_vec.begin(), str_vec.end()); // OK
ProcessStrings(str_list.begin(), str_list.end()); //OK
ProcessStrings(so_set.begin(), so_set.end()); // Error
क्या मैं सच में करना चाहते हैं एक जो नीचे स्पष्ट रूप से इनपुट की राशि को प्रतिबंधित करता है (स्यूडोकोड चेतावनी) की तरह एक परिभाषा है
अनिवार्य रूप से, मैं जो करने की कोशिश कर रहा हूं वह फ़ंक्शन विनिर्देश को प्रतिबंधित करता है ताकि यह उस कार्य के उपयोगकर्ता को स्पष्ट कर सके जो इसे स्वीकार करता है और यदि कोड संकलित करने में विफल रहता है तो उन्हें एक संदेश मिलता है कि वे गलत पैरामीटर प्रकारों का उपयोग कर रहे हैं फ़ंक्शन बॉडी में कुछ जो XXX Funct है आयन XXX वर्ग के लिए नहीं मिला।
क्या आप इसे 'std :: string' या किसी भी' std :: basic_string' प्रकार पर प्रतिबंधित करना चाहते हैं? –
आह, वास्तव में कोई _needs_ __concepts__! दुर्भाग्यवश, उन्हें सी ++ मानकीकरण समिति के एक प्रमुख सदस्य की सिफारिश पर पिछले गर्मियों में फेंक दिया गया था, क्योंकि उन्होंने सी ++ 0x के उस बिंदु पर आने में देरी की जहां 'एक्स' हेक्साडेसिमल अंक बन गया। – sbi
आपको अपने टेम्पलेट को कॉल करने के लिए प्रतिबंधित क्यों करना है? टेम्पलेट का पूरा बिंदु अच्छी तरह से निर्मित एल्गोरिदम का पुन: उपयोग सक्षम है। – jmucchiello