C ++ के बारे में मेरी एक बड़ी शिकायत यह है कि डायनैमिक लाइब्रेरी (यानी dll / so) सीमाओं के बाहर std लाइब्रेरी ऑब्जेक्ट्स को पास करना कितना मुश्किल है।
एसटीडी लाइब्रेरी अक्सर हेडर-ओनली होती है। जो कुछ भयानक अनुकूलन करने के लिए महान है। हालाँकि, dll के लिए, वे अक्सर विभिन्न संकलक सेटिंग्स के साथ निर्मित होते हैं जो आंतरिक संरचना / एक std लाइब्रेरी कंटेनरों के कोड को प्रभावित कर सकते हैं। उदाहरण के लिए, MSVC में एक dll itter डीबगिंग के साथ निर्माण कर सकता है जबकि दूसरा इसके साथ बनाता है। ये दो dll आसपास के std कंटेनरों को चलाने के मुद्दों में चल सकते हैं। यदि मैं std::string
अपने इंटरफ़ेस में उजागर करता हूं, तो मैं यह गारंटी नहीं दे सकता कि ग्राहक जिस कोड का उपयोग कर रहा std::string
है वह मेरी लाइब्रेरी का सटीक मिलान है std::string
।
यह समस्याओं को दूर करने के लिए कठिन है, सिरदर्द, आदि। आप या तो सख्ती से इन मुद्दों को रोकने के लिए अपने संगठन में संकलक सेटिंग्स को नियंत्रित करते हैं या आप एक सरल सी इंटरफ़ेस का उपयोग करते हैं जिसमें ये समस्याएं नहीं होंगी। या अपने ग्राहकों को अपेक्षित संकलक सेटिंग्स का उपयोग करने के लिए निर्दिष्ट करें जो उन्हें उपयोग करना चाहिए (जो बेकार है यदि कोई अन्य पुस्तकालय संकलक सेटिंग्स निर्दिष्ट करता है)।
मेरा सवाल यह है कि इन मुद्दों को हल करने के लिए C ++ 11 ने कुछ करने की कोशिश की या नहीं?
DLL
एस के बीच । SO
एस के बीच यह हमेशा ठीक काम करता था।