मान लें कि मैं सी ++ में एक डीएलएल लिखता हूं और एक विधि निर्यात करना चाहता हूं जो std :: vector पैरामीटर लेता है। क्या मैं विभिन्न एसटीएल संस्करणों के बीच किसी बाइनरी संगतता की उम्मीद कर सकता हूं?एसटीएल कंटेनर की बाइनरी संगतता
उत्तर
यदि आप एक ही कंपाइलर के अद्यतन संस्करणों के साथ संस्करणों के बीच शामिल हैं, तो हाँ, यह कुछ मामलों में (और करेंगे) काम कर सकता है, लेकिन आपको सावधान रहना होगा। विंडोज़ पर इंटेल और माइक्रोसॉफ्ट कंपाइलर्स जैसे कुछ विशेष मामले भी हैं - इंटेल बाइनरी संगतता बनाए रखने के लिए बहुत सावधान है, और कम से कम जब मैंने इसे आजमाया है, तो यह हमेशा अच्छी तरह से काम करता है।
ज्यादातर अन्य मामलों के लिए, उत्तर नहीं है।
मुझे संस्करणों के बीच संगतता की किसी भी गारंटी के बारे में पता नहीं है, यहां तक कि एक ही संकलक पर रिलीज और डीबग के बीच भी नहीं।
एक समाधान वेक्टर के लिए एक रैपर बनाने के लिए है। एक वर्ग बनाएं जिसमें कंटेनर से आपको आवश्यक सभी कार्य हैं, और निजी वेक्टर पर संचालन के संदर्भ में उन्हें लागू करें जो कक्षा का एकमात्र सदस्य है। डीएलएल में सभी कक्षा कोड रखें।
+1 - लेकिन इसका अभी भी मतलब यह नहीं है कि यह पोर्टेबल होगा। अपवाद हैंडलिंग योजना जैसी चीजें कंपाइलर संस्करण या कंपाइलर स्विच के बीच भी बदल सकती हैं, और उन चीजों पर आपका कोई नियंत्रण नहीं है। आम तौर पर, यदि आप बाइनरी संगतता चाहते हैं तो आपको एक सी इंटरफेस का उपयोग करने की आवश्यकता है। (उदाहरण के लिए, एमएसवीसी ++ पर '/ SAFESEH', और '/ Eh' स्विच बाइनरी स्तर अपवाद मॉडल को बदलते हैं, और मुझे विश्वास है कि कम से कम'/GS' भी करता है) –
बिलकुल नहीं! यदि आप एक ही कंपाइलर के एक अलग संस्करण के साथ संकलित किए गए थे तो आप एसटीएल के समान संस्करण पर भी भरोसा नहीं कर सकते हैं।
आप विभिन्न कंपाइलर झंडे के साथ एक ही एसटीएल संस्करण में बाइनरी संगतता की भी उम्मीद नहीं कर सकते हैं। –