मान लीजिए कि मेरे पास दो परियोजनाएं हैं। एक एक आवेदन है और दूसरा एक साझा लाइब्रेरी है जिसमें सामान्य, पुन: प्रयोज्य कोड शामिल है जिसका उपयोग केवल इस एप्लिकेशन से अधिक किया जा सकता है।सी ++ इंटरफ़ेस डिज़ाइन
मेरा एप्लिकेशन एसटीएल का उपयोग करता है, और मेरी साझा लाइब्रेरी एसटीएल का भी उपयोग करती है। यहां पहली समस्या यह है कि मेरी साझा लाइब्रेरी एसटीएल का उपयोग कर रही है। यदि मैंने कभी भी अपने आवेदन में एसटीएल का एक नया संस्करण बनाया है, लेकिन मैं अपनी साझा लाइब्रेरी का पुनर्निर्माण नहीं करता क्योंकि यह आवश्यक नहीं है, तो हमारे पास तुरंत संगतता समस्याएं होंगी।
इस मुद्दे को हल करने के लिए मेरा पहला विचार साझा लाइब्रेरी कक्षाओं में इंटरफ़ेस में एसटीएल का उपयोग नहीं करना है। मान लें कि हमारे पास मेरी लाइब्रेरी में एक फ़ंक्शन है जो एक स्ट्रिंग लेता है और इसके साथ कुछ करता है।
void DoStuffWithStrings(char const* str);
बजाय
:: मैं समारोह प्रोटोटाइप देखो की तरह होगा
void DoStuffWithStrings(std::string const& str);
तार के लिए यह शायद एसटीएल के विभिन्न संस्करणों के बीच ठीक हो जाएगा, लेकिन नकारात्मक पक्ष यह है कि हम std::string
से जा रहे हैं, char*
पर, और std::string
पर, जो ऐसा लगता है कि प्रदर्शन के मुद्दों का कारण बनता है।
क्या उनके एसटीएल समकक्षों को कच्चे प्रकार के मुक्केबाजी/अनबॉक्सिंग की सिफारिश की जाती है? जब हम std::list
पर ऐसा करने का प्रयास करते हैं तो यह और भी बदतर हो जाता है, क्योंकि वास्तव में कोई "कच्चा प्रकार" नहीं है, मुझे पता है कि हम इसे आसानी से पास कर सकते हैं क्योंकि बिना किसी प्रकार के ओ (एन) या इसी तरह के ऑपरेशन किए।
इस परिदृश्य में कौन से डिज़ाइन सबसे अच्छे काम करते हैं? प्रत्येक के पेशेवर/विपक्ष क्या हैं?
संगतता केवल चिंता का विषय है और अंगूठे IMHO का एक बहुत अच्छा नियम नहीं है। जैसा कि आप कहते हैं, यदि आवश्यकताएं गारंटी नहीं देती हैं कि साझा लाइब्रेरी हमेशा एप्लिकेशन के साथ बनाई जाएगी, लेकिन सी द्वारा इसका उपयोग नहीं किया जाता है, तो आपको अभी भी संगतता के मुद्दों पर विचार करने की आवश्यकता है। सी ++ में कमजोर साझा लाइब्रेरी समर्थन (.NET और C# जैसे कुछ की तुलना में) बहुत कमजोर है, इसलिए मैं हमेशा संगतता की गारंटी देने का प्रयास करता हूं, जहां भी आवश्यकता हो, चाहे कहीं भी संभव हो। 'Std :: vector' और' std :: map' के लिए, मुझे लगता है कि हम सबसे अच्छा कर सकते हैं उन्हें किसी भी तरह उपयोगकर्ता प्रकार के लिए मानचित्र बनाते हैं। –
हाँ हालत अधिक "अगर आप सी की जरूरत नहीं है और सभी पुस्तकालयों पर नियंत्रण है" .. – stijn