std::string
वास्तव में एक टेम्पलेट श्रेणी के typedef
है, मैं इसे कैसे ओवरराइड कर सकता हूं? मैं एक यूटीएफ -8 std::string
बनाना चाहता हूं जो अन्य चीजों के साथ सही लंबाई को वापस कर देगा।std :: स्ट्रिंग के कार्यों को ओवरराइट करना और ओवरराइड करना?
उत्तर
प्राप्त नहीं करते STRING से
std :: स्ट्रिंग, कि, मूल रूप से पूरे basic_string टेम्पलेट नहीं बनाया गया है है से प्राप्त किया जा करने के लिए। इसके बारे में पहले से ही लेखों के ज़िलियन हैं। इसमें कोई वर्चुअल फ़ंक्शन नहीं है इसलिए ओवरराइड करने के लिए कुछ भी नहीं है। सबसे अच्छा आप कुछ छुपा सकते हैं। रचना/एकत्रीकरण का उपयोग करना सबसे अच्छा है! यही है, बस अपनी कक्षा में टाइप स्ट्रिंग का सदस्य रखें और कॉल अग्रेषित करें! फिर से, बस बनाने के लिए यकीन है कि
STRING
आप आईसीयू को देखा है से निकाले जाते हैं नहीं माना जाता?
एक टाइपिफ़ बस एक सुविधाजनक लेबल है।
कक्षा foo: सार्वजनिक बार {};
बार ठीक काम करता है जब बार एक पीटी का टाइपपीफ होता है।
इस मामले में यह एक अच्छा विचार नहीं हो सकता है, लेकिन भाषा इसका समर्थन करती है।
इसे आमतौर पर मानक पुस्तकालय कंटेनर से प्राप्त करने के लिए सी ++ में गलती माना जाता है। हालांकि, जो कार्यक्षमता आप खोज रहे हैं वह पहले ही लागू हो चुकी है। Glib::ustring पर एक नज़र डालें।
आशा है कि इससे मदद मिलती है!
बेहतर विचार: std :: string से विरासत के बिना एक एसटीएल-संगत utf8_string कंटेनर बनाएं।
आप अपनी खुद की स्ट्रिंग प्रकार को परिभाषित करना होगा, तो std::string
से विरासत नहीं करते हैं लेकिन अपनी खुद की Character Traits वर्ग को परिभाषित और तरह
typedef std::basic_string<unsigned char, utf8_traits> utf8string;
भी देखें Herb Sutter's website कुछ करना।
+1 - एक कारण है 'std :: string' एक 'typedef' है, और यह है। –
दूसरी ओर, मैं यूटीएफ -8 अनुक्रमों को संभालने के लिए 'basic_string' का उपयोग नहीं करता। जब भी आप इसे कुशल बनाने की कोशिश करते हैं तो आप अच्छे से ज्यादा नुकसान करेंगे। –
@Maththieu एम, यह पूरी तरह से निर्भर करता है कि आप कैरेक्टर लक्षणों को कैसे कार्यान्वित करते हैं। मैं दो विकल्प देख सकता हूं: या तो उन्हें यूटीएफ -8 के रूप में सीधे पैक करें और 'state_type' को लागू करें, या उन्हें यूटीएफ -32 के रूप में पैक करें और सीमा पर रूपांतरित करें। किसी भी तरह से, यह बहुत काम है, लेकिन यह एसटीएल एल्गोरिदम के साथ संगतता बरकरार रखता है। –
जैसा कि पहले से ही दूसरों द्वारा बताया गया है: std::string
से प्राप्त न करें, यह अभी इसके लिए डिज़ाइन नहीं किया गया है।
आपको this article पर एक नज़र रखना चाहिए, जो दिखाता है कि एक उदाहरण के रूप में केस असंवेदनशील स्ट्रिंग क्लास कैसे बनाएं। आप देखेंगे कि std::basic_string
में लागू तर्क चरित्र प्रकार से स्वतंत्र है, और कुछ कस्टम char_traits
प्रदान करना चाल चलाना चाहिए।
असल में मैं ऐसा करने की सिफारिश नहीं करता। मैंने कुछ साल पहले ऐसा किया था और मुझे उस फैसले पर अफसोस करना पड़ा। क्या होगा कि आपको अपने नए कोड और मानक स्ट्रिंग प्रकार के बीच, आगे अपने कोड बेस पर कनवर्ट करना होगा। यह सुंदर नहीं है। विस्तार से बताए गए एक महान लेख यहां पाए गए हैं: http://lafstern.org/matt/col2_new.pdf। सारांश: केस असंवेदनशीलता किसी ऑब्जेक्ट के बारे में नहीं है, यह इस बात के बारे में है कि आप किसी ऑब्जेक्ट का उपयोग कैसे करते हैं। –
एक यूनिकोड कार्यान्वयन लिखना जो हर परिस्थिति में ठीक से अनुरूपता और काम करता है, करना बहुत मुश्किल है। मैं आपको अपनी खुद की रोलिंग के बजाय मौजूदा पुस्तकालय या कार्यान्वयन का उपयोग करने की सलाह दूंगा। उदाहरण के लिए, विंडोज़, ओएसएक्स और क्यूटी में सभी पुस्तकालय हैं जो यूटीएफ -16 और अन्य एन्कोडेड तारों का समर्थन करते हैं।
बस सुनिश्चित करें कि आप जानते हैं कि आप पहले क्या कर रहे हैं। वास्तव में "सही लंबाई" क्या है जो आप अपनी स्ट्रिंग ऑब्जेक्ट्स से वापस करना चाहते हैं? कोड बिंदुओं की संख्या?यह उपयोगकर्ता द्वारा कथित वर्णों की संख्या से हमेशा मेल नहीं खाता है।
वैसे भी, std :: string से प्राप्त करने के लिए वैकल्पिक दृष्टिकोण देखने के लिए utf8-cpp लाइब्रेरी पर एक नज़र डालें।
- 1. पथ-निर्भर प्रकार पैरामीटर के साथ कार्यों को ओवरराइड करना
- 2. socket.io के उत्सर्जन को ओवरराइड करना और चालू करना?
- 3. एक सेटर विधि को ओवरराइड करना, और
- 4. ओवरराइड करना और बेस प्रकार
- 5. संरक्षित तरीकों को ओवरराइड करना
- 6. बराबर विधि को ओवरराइड करना
- 7. एक्सटेंशन विधियों को ओवरराइड करना
- 8. जावा विधि को ओवरराइड करना
- 9. 'Html.EditorFor` पर कक्षा को ओवरराइट करना
- 10. शुद्ध कार्यों को समाप्त करना
- 11. इंटरफ़ेस के चर को ओवरराइड करना?
- 12. ब्राउज़र के कीबोर्ड शॉर्टकट्स को ओवरराइड करना
- 13. प्रोटोकॉल के अनुरूप गुणों को ओवरराइड करना
- 14. स्ट्रिंग द्वारा std :: vector <std :: pair <std :: string, bool >> को सॉर्ट करना?
- 15. जावास्क्रिप्ट: XMLHttpRequest.open ओवरराइड करना()
- 16. कार्यों के लिए अद्वितीय_ptr पास करना
- 17. खाली स्ट्रिंग के c_str को कॉल करना
- 18. std :: स्ट्रिंग और QByteArray
- 19. लुआ में सी ++ विधि को ओवरराइड करना और इसे सी ++
- 20. क्या विशिष्ट कार्यों के लिए स्फिंक्स ऑटोडोक को ओवरराइड करना संभव है?
- 21. किसी MySQL तालिका में सम्मिलित करना और किसी भी मौजूदा डेटा को ओवरराइट करना
- 22. सिम्फनी 2 अपवादों को ओवरराइड करना?
- 23. डिफ़ॉल्ट तर्क को ओवरराइड करना- व्यवहार
- 24. Django - Model.create() विधि को ओवरराइड करना?
- 25. XMLHttpRequest की प्रेषण विधि को ओवरराइड करना
- 26. वैश्विक कार्रवाई फ़िल्टर को ओवरराइड करना
- 27. PostgreSQL उपयोगकर्ता परिभाषित कार्यों को डिबग करना
- 28. तृतीय पक्ष को ओवरराइड करना JS
- 29. एक बैकबोन मॉडल ओवरराइट करना इवेंट
- 30. सर्वलेट कितने कार्यों को निष्पादित करना चाहिए?
-1। इस कार्य के लिए सबसे अच्छा अभ्यास एक चरित्र गुण वस्तु प्रदान करना और 'std :: basic_string' को तत्काल करना है। इस मामले में 'std :: string' को छिपाने से 'char' signness का मुद्दा उठता है, क्योंकि यूटीएफ -8 एक 8-बिट मल्टीबाइट एन्कोडिंग है। –
@ लार्समैन: कोई आपत्ति नहीं :) मैं इस तथ्य से बहुत व्यस्त था कि किसी ने कहीं नॉनपोलिमॉर्फिक प्रकार से प्राप्त होने का विचार किया था :) –
-1। वास्तव में सवाल का जवाब नहीं देता है। लार्समैन का जवाब कम से कम एक दिशा के लिए एक अच्छा विचार देता है। – leetNightshade