2011-11-06 16 views
7

अधिक एक कस्टम और अभ्यास सवाल है, लेकिन यह खराब फार्म, या अत्यधिक अनुचित (बुराई के अपने व्याख्या चुनें) क्यूटी पुस्तकालय प्रकार और इसी तरह के मानक सी ++ प्रकार के उपयोग के मिश्रण माना जाता है एक कार्यक्रम में?क्यूटी - मिश्रण क्यूटी और std :: सी ++ प्रकार

उदाहरण के लिए, यह केवल स्ट्रिंग उपयोग के लिए QStrings उपयोग करने के लिए छड़ी के लिए, या लोगों को अक्सर QString और std :: स्ट्रिंग प्रकार मिश्रण है स्रोत फ़ाइल में अत्यधिक सलाह दी जाती है?

मुझे लगता है कि QString के उपयोग और एसटीडी शामिल कुछ कोड :: एक फ़ाइल में स्ट्रिंग विरासत में मिला है और सोच रहा है कि क्या एक या दूसरे के लिए सब कुछ परिवर्तित करने के लिए।

उत्तर

7

मुझे लगता है कि यह वास्तव में नीचे आता है "यह निर्भर करता है कि आप क्या कर रहे हैं।" निश्चित रूप से, चीजों को केवल एक ही प्रकार के रूप में रखना आसान है। फिर भी, ऐसे समय हो सकते हैं जब आपको std :: स्ट्रिंग्स पास करने या QStrings पास करने की आवश्यकता होती है और यह रूपांतरण करने के लिए बेहतर प्रदर्शन-वार हो सकता है।

यह भी ध्यान रखें कि QStrings std: तारों के समान नहीं हैं। तो उन्हें ध्यान में रखें जब उनके बीच परिवर्तित हो (या केवल एक निश्चित प्रकार का उपयोग करना चुनते हैं)।

3

सामान्य तौर पर मैं std::string और क्यूटी कंटेनरों से अधिक QString उपयोग करना पसंद करते हैं (जैसे QList, ...) कोड में std से ज्यादा कंटेनर कि कसकर, वैसे भी क्यूटी ढांचे के लिए युग्मित है और इसके बिना कोई मतलब नहीं होगा। अन्य सभी घटकों (जैसे सहायक पुस्तकालयों और जैसे) में मैं लचीलापन के लिए चीजों के मानक सी ++ तरीके का उपयोग करना पसंद करता हूं।

लेकिन मुझे लगता है यह एक व्यक्तिपरक निर्णय के अधिक है, के रूप में प्रकार के आम तौर पर एक से कन्वर्ट करने के लिए एक और (और क्यूटी कंटेनर भी मानक अनुरूप iterators प्रदान) काफी आसान है। हालांकि अत्यधिक क्यूटी केंद्रित कोड में क्यूटी कंटेनर बेहतर काम कर सकते हैं, खासकर क्यूटी के मेटा ऑब्जेक्ट और टाइप सिस्टम के साथ।

1

मुझे लगता है कि यह निर्णय लेने के लिए आप पर निर्भर है। किसी भी तरह से विचार करें कि दोनों के बीच कनवर्ट करने के लिए स्ट्रिंग की एक प्रति की आवश्यकता होती है, इसलिए यदि दोनों का उपयोग रूपांतरण की आवश्यकता है, तो प्रदर्शन की अवधि में यह अच्छा नहीं है: उदाहरण के लिए QString::fromStdString और QString::fromStdWString पढ़ें। यदि आप क्यूटी का उपयोग कर रहे हैं तो मुझे लगता है कि आप न केवल क्यूस्ट्रिंग का उपयोग कर रहे हैं, और इस मामले में क्यूटी कक्षाओं के अधिकांश तरीकों से आपको क्यूस्ट्रिंग प्रदान करने की आवश्यकता होती है। तो, प्रदर्शन के लिए बुरा हो सकता है और लिखने के लिए असहज हो सकता है।

को ध्यान में रखना भी है कि std :: स्ट्रिंग कार्यान्वयन के लिए कार्यान्वयन से थोड़ा भिन्न होता है, और std :: स्ट्रिंग कॉपी-ऑन-राइट अलग प्रदर्शन दिखा सकता है।

+0

आपके लिंक टूटे हैं। –

3

QStrings और सी ++ तार विभिन्न समस्याओं का समाधान - मुख्य अंतर यह है कि QStrings स्पष्ट स्थानों/एन्कोडिंग के साथ सौदा, std :: तार नहीं है, जबकि है।

इसलिए उपयोगकर्ताओं द्वारा टाइप किए गए सभी डेटा के लिए QStrings का उपयोग करें, और आपके उपयोगकर्ताओं को प्रदर्शित होने वाले सभी तारों, या आप भविष्य में एन्कोडिंग रूपांतरणों में जानकारी खोने का जोखिम उठाने और/या भविष्य में अपने ऐप को अंतर्राष्ट्रीय बनाने के लिए कठिन बनाते हैं।

कुछ भी जहां मुझे सिर्फ एक char * समकक्ष की आवश्यकता है, उदा। डेटाबेस से डेटा पढ़ना जहां स्थानीय/एन्कोडिंग लागू नहीं हैं, मैं std :: स्ट्रिंग का उपयोग करता हूं क्योंकि वे गैर-क्यूटी पुस्तकालयों के साथ उपयोग करना बहुत आसान हैं और आपका डेटा किसी भी एन्कोडिंग रूपांतरणों के माध्यम से नहीं मिलता है। हालांकि, आपको सिग्नल/स्लॉट तर्कों में उनका उपयोग करने में सक्षम होने के लिए उन्हें क्यूटी प्रकार प्रणाली में स्पष्ट रूप से जोड़ना होगा, जो एक बार आपको पता चल जाए कि यह आसान है।

लेकिन अंत में यह एक निर्णय कॉल नहीं है - केवल नए लोगों के लिए अपने codebase अधिक सुगम बनाने के लिए, यह बेहतर बस हर जगह QString उपयोग करने के लिए संभवतः सिर्फ एसटीडी हो सकता है, या :: स्ट्रिंग हर जगह यदि आप एक गैर में QtCore उपयोग कर रहे हैं -गुई ऐप।

5

यह blog post देखें जो STL से क्यूटीएल और std::string से QString की तुलना करता है।

मेरे 2 सेंट

यह वास्तव में आप क्या कर रहे पर निर्भर करता है। आम तौर पर जब मैं कुछ कोडिंग कर रहा हूं जहां Qt आवश्यक नहीं है (उदाहरण के लिए एक लाइब्रेरी) मैं हमेशा STL का उपयोग करता हूं। दूसरी ओर यदि मैं एक जीयूआई आवेदन के लिए कोड लिख रहा हूं, तो मैं QTL और QStringSTL और std::string पर उपयोग करना पसंद करता हूं। यदि मैं इस कोड को STL का उपयोग करके लिखी गई लाइब्रेरी के साथ एकीकृत करना चाहता हूं तो मैं ओवरलोडेड फ़ंक्शन प्रदान करता हूं जो STL से QTL और QString से std::string पर रूपांतरण करते हैं।

QStrings एक जरूरी है यदि आप tr() और QLinguist का उपयोग करने से अपने आवेदन को स्थानीयकृत करना चाहते हैं तो यह आसान हो जाता है।