2011-02-27 11 views
7

पर बेनकाब करने के लिए मूल प्रकार मैं विंडोज को लक्षित कर रहा हूं लेकिन मुझे कोई कारण नहीं दिख रहा है कि कुछ एपीआई कोड जो मैं लिख रहा हूं, मूल सी ++ प्रकारों का उपयोग नहीं कर सकता। मैं जो करना चाहता हूं वह स्ट्रिंग्स और इंट्स लौटने वाली विधियों का पर्दाफाश कर रहा है। सी # दुनिया में मैं केवल स्ट्रिंग का उपयोग करता हूं, और एक यूनिकोड स्ट्रिंग करता हूं, लेकिन वीसी ++ में मुझे std :: string, std :: wstring, या एमएफसी/एटीएल CStrings का उपयोग करने का विकल्प मिला है।सी ++ एपीआई

क्या मुझे सिर्फ यूनिकोड का समर्थन करने के लिए std :: wstring का उपयोग करना चाहिए, या क्या मैं std :: स्ट्रिंग का उपयोग कर सकता हूं जिसे मेरी बिल्ड सेटिंग्स के आधार पर यूनिकोड में संकलित किया जाएगा? मैं बाद की ओर झुका रहा हूँ। मैं अन्य स्ट्रिंग प्रकारों के लिए मेरी ऑब्जेक्ट्स पर [आइटम] AsCString() विधियां प्राप्त करना पसंद करूंगा।

मुझे भी पूर्णांक के बजाय size_t का उपयोग करना चाहिए?

एपीआई मेरे द्वारा उपयोग किया जा रहा है, और शायद भविष्य में डेवलपर सी ++ जीयूआई पर काम कर रहा है। यह चिंताओं को अलग करने का एक तरीका है। मेरी प्राथमिकताएं:

  • अन्य डेवलपर्स के लिए अंतर्ज्ञान।
  • कुलपति ++
  • अन्य सी ++ compilers के साथ संगतता के साथ आगे संगतता
  • प्रदर्शन (यह मेरे लिए एक कम चिंता का विषय है, लेकिन मेरे अनुप्रयोग के आराम के लिए स्टार्टअप समय की जरूरत है)

किसी भी गाइड की सराहना की जाएगी ।

+1

प्रोजेक्ट कॉन्फ़िगरेशन की यह शैली वास्तव में प्रोजेक्ट के उद्देश्य पर निर्भर करती है, आदि। सबकुछ इसकी जगह है, यही कारण है कि कुछ पहलुओं को आसानी से बहिष्कृत नहीं किया जाता है। 'std :: string' मैंने देखा है कि सबसे आम उपयोग है (हालांकि मैंने यूनिकोड के लिए 'wchar_t', आदि देखा है) और यदि आप किसी आकार का आकलन कर रहे हैं, तो' size_t' का उपयोग करें। – RageD

उत्तर

1

आपकी स्थिति में मुझे राय विकसित करने और निर्णय लेने में कुछ घंटे/दिन लगेंगे। सबसे पहले, मैं C++I को C++ _ API के लिए भी बहुत पसंद करता हूं, यहां तक ​​कि सी ++ कोड के लिए भी। फिर जवाब char *, या wchar *, या tCHAR * होगा। अब, अनुमान लगाने का प्रयास करें कि क्या आप वास्तव में यूनिकोड की आवश्यकता की अपेक्षा करते हैं। मेरी परियोजनाओं में से अधिकांश (जीयूआई वाले लोगों सहित) को यूनिकोड के लिए कोई आवश्यकता नहीं थी, सादे सी-एरे की सादगी और परिचितता अक्सर हराया मुश्किल होती है।

संक्षेप में, भविष्यवाणी करने का प्रयास करें कि आपकी क्या ज़रूरत होगी, भविष्य में बहुत दूर देखने की कोशिश न करें (2 साल एक अच्छा निशान है), फिर जरूरतों को पूरा करने के लिए सबसे सरल समाधान के साथ आते हैं।

अंतिम: अपने प्रश्न का अधिक उत्तर देने के लिए, मैं std :: स्ट्रिंग के साथ मूल्यांकन करने के लिए अपनी पहली पसंद के रूप में शुरू करूंगा। जब तक मुझे अन्य विकल्पों के पक्ष में कुछ बोली लाभ नहीं मिलेगा, मैं इसके साथ रहूंगा।

1

एमएफसी सीएसटींग के बजाय std :: wstring/string का उपयोग करने से आप अपने कोड को अन्य ढांचे (जैसे विंडोज़ के लिए क्यूटी) पर पोर्ट कर सकते हैं।

std :: स्ट्रिंग का उपयोग करते समय भी आप यूटीएफ -8 में तारों को एन्कोड कर सकते हैं, इसलिए आपका एपीआई अभी भी यूनिकोड स्ट्रिंग को वापस करने में सक्षम होगा। ध्यान रखें कि यहां तक ​​कि wstring वास्तव में यूटीएफ -16 है और पूर्ण 32 बिट्स यूनिकोड नहीं है (जबकि कुछ ऑपरेटिंग सिस्टम wstring यूटीएफ -32 है)।

2

आपको शायद एसटीएल स्ट्रिंग प्रकार से चिपकना चाहिए। एमएफसी सीएसटींग क्लास आजकल के शीर्ष पर बनाया गया है।

जैसा कि पहले उल्लेख किया गया है, Wstring का उपयोग यूनिकोड मुद्दों को हल करने के लिए एक जादू बुलेट नहीं है क्योंकि कई यूनिकोड वर्ण हैं जिन्हें अभी भी कई wchars को एन्कोड करने की आवश्यकता है।

यूटीएफ -8 का उपयोग करने के बजाय संभावित लाभ हैं (उदाहरण के लिए आपको अंतहीनता के बारे में चिंता करने की ज़रूरत नहीं है)।

विंडोज़ पर, सभी आधुनिक कर्नेल wchar आधारित हैं, इसलिए यदि आप एपीआई के 8 बिट चार संस्करणों का उपयोग करते हैं तो एक (न्यूनतम) प्रदर्शन ओवरहेड शामिल है।

संबंधित मुद्दे