หนึ่งในข้อร้องเรียนหลักของฉันเกี่ยวกับ C ++ คือวิธียากในทางปฏิบัติก็คือการส่งวัตถุไลบรารี std นอกขอบเขตไลบรารีแบบไดนามิก (เช่น dll / ดังนั้น)
ไลบรารี std มักเป็นส่วนหัวเท่านั้น ซึ่งเป็นสิ่งที่ดีสำหรับการเพิ่มประสิทธิภาพที่ยอดเยี่ยม อย่างไรก็ตามสำหรับ dll พวกเขามักจะสร้างด้วยการตั้งค่าคอมไพเลอร์ที่แตกต่างกันซึ่งอาจส่งผลกระทบต่อโครงสร้างภายใน / รหัสของคอนเทนเนอร์ไลบรารี std ตัวอย่างเช่นใน MSVC dll หนึ่งอาจสร้างขึ้นด้วยการดีบัก iterator ในขณะที่คนอื่นสร้างมันออก Dll ทั้งสองนี้อาจพบปัญหาในการส่งผ่านคอนเทนเนอร์มาตรฐาน หากฉันเปิดเผยstd::string
ในส่วนต่อประสานของฉันฉันไม่สามารถรับประกันได้ว่ารหัสที่ลูกค้าใช้std::string
อยู่นั้นตรงกับห้องสมุดของฉันstd::string
ทั้งหมด
สิ่งนี้นำไปสู่ปัญหาการดีบักปัญหาปวดหัว ฯลฯ คุณควบคุมการตั้งค่าคอมไพเลอร์ในองค์กรของคุณอย่างแน่นหนาเพื่อป้องกันปัญหาเหล่านี้หรือคุณใช้อินเทอร์เฟซ C ที่ง่ายกว่าที่ไม่มีปัญหาเหล่านี้ หรือระบุให้กับลูกค้าของคุณถึงการตั้งค่าคอมไพเลอร์ที่คาดหวังที่พวกเขาควรใช้ (ซึ่งจะดูดถ้าห้องสมุดอื่นระบุการตั้งค่าคอมไพเลอร์อื่น ๆ )
คำถามของฉันคือ C ++ 11 พยายามทำสิ่งใดเพื่อแก้ไขปัญหาเหล่านี้หรือไม่
DLL
s ระหว่างSO
มันใช้ได้ดีเสมอ