सबसे पहले, अगर आप चाहते हैं उत्पादन char
रों करने के लिए (और सभी char
एस), आप ostreambuf_iterator<char>
का उपयोग करने की आवश्यकता होगी, और ostream_iterator<string>
नहीं। और ostreambuf_iterator<char>
व्यक्त करता है जो आप ostream_iterator<char>
से बेहतर चाहते हैं; आप char
एस आउटपुट कर रहे हैं, कुछ भी स्वरूपित नहीं कर रहे हैं। (ostream_iterator
<<
ऑपरेटर, जो प्रारूप का उपयोग करता है।)
दूसरा, जानते हैं कि हमेशा एक एक के बाद एक के लिए ( ऊपरी मामले में जैसे 'ß'
नक्शे दो चरित्र अनुक्रम "SS"
करने के लिए) ऊपरी करने के लिए कम से अनुवाद नहीं है कि हो सकता है , इसलिए std::transform
का उपयोग वास्तव में नौकरी करने के लिए नहीं किया जा सकता है। (और निश्चित रूप से, यह यूटीएफ -8 जैसे मल्टीबाइट एन्कोडिंग को सही तरीके से संभाल नहीं करता है।) सबसे सरल उपयोगों के लिए, आपको कुछ अधिक जटिल की आवश्यकता है। लेकिन फिर भी सरलतम मामलों के लिए:
std::toupper
ओवरलोड हो गया है: भार के में से एक एक टेम्पलेट है, जो दो तर्क लेता है, और अन्य एक समारोह जो एक एकल int
लेता है; न तो यहां सीधे काम करेगा, और तथ्य यह है कि transform
भी एक टेम्पलेट का अर्थ है कि ओवरलोड रिज़ॉल्यूशन और टेम्पलेट प्रकार कटौती तब भी काम नहीं करेगी जब उन्होंने किया था। तो मूल रूप से, आपको कुछ जोड़ना होगा।यह अगर आप पर्याप्त क्वालिफायर जोड़ सकते हैं और दूसरा तर्क बाध्य करने के लिए उपयोग करें boost::bind
या कुछ इसी तरह की 2 तर्क टेम्पलेट समारोह का उपयोग करना संभव है, लेकिन यह एक सरल toupper
कार्यात्मक तर्क अपने आप लेखन के रूप में लगभग के रूप में ज्यादा पाठ है। और अगर आप एक तर्क प्रपत्र (जो स्पष्ट रूप से पहुँचा जा सकता है अगर आप <ctype.h>
और ::toupper
का उपयोग शामिल है) अगर आप एक char
तर्क के रूप में उपयोग करने के लिए जब आप यह कहते हैं क्योंकि यह व्यवहार अपरिभाषित है का उपयोग नहीं कर सकते हैं: आप कन्वर्ट करने के लिए है char
unsigned char
करने के लिए पहले (जब तक, ज़ाहिर है, सादा char
कार्यान्वयन आप — उपयोग कर रहे हैं और सभी कार्यान्वयन में अहस्ताक्षरित है जो अपने कोड कभी स्थलांतरित हो जाएगा करने के लिए)।
स्रोत
2011-05-11 11:42:49
आपको जो वास्तविक त्रुटि मिल रही है उसे पोस्ट करना महत्वपूर्ण है। विशेष रूप से स्वीकार्य उत्तर पर एक टिप्पणी में आपने उस त्रुटि को जोड़ा है, और बदले में यह कहता है कि समस्या ओवरलोड रिज़ॉल्यूशन के साथ है। उस बिंदु पर, सभी जानकारी के साथ, लोग समस्या के बारे में स्पष्ट स्पष्टीकरण के साथ आ सकते हैं और इसे सुलझाने के विभिन्न तरीकों के बजाय, केवल एक काम के बजाय, आपको अगली समान समस्या (उपयोग करने पर ओवरलोड रिज़ॉल्यूशन) एक टेम्पलेट में एक फ़ंक्शन) –
हाँ, मैं त्रुटि के बारे में भूल गया, क्षमा करें – Kobe