คำถามติดแท็ก memcmp

6
วิธีเปรียบเทียบ struct ทั่วไปใน C ++?
ฉันต้องการเปรียบเทียบ structs ด้วยวิธีทั่วไปและฉันทำบางสิ่งเช่นนี้ (ฉันไม่สามารถแบ่งปันแหล่งที่มาจริงได้ดังนั้นขอรายละเอียดเพิ่มเติมหากจำเป็น): template<typename Data> bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&data1; void* dataStart2 = (std::uint8_t*)&data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } ส่วนใหญ่ใช้งานได้ตามที่ตั้งใจยกเว้นบางครั้งมันจะคืนค่าเท็จแม้ว่าอินสแตนซ์ของ struct สองรายการมีสมาชิกเหมือนกัน หลังจากค้นหาบางฉันพบว่าmemcmpสามารถล้มเหลวเนื่องจากโครงสร้างที่ใช้เป็นเบาะ มีวิธีที่เหมาะสมกว่าในการเปรียบเทียบหน่วยความจำที่ไม่แยแสกับการขยายหรือไม่ ฉันไม่สามารถแก้ไข structs ที่ใช้ (พวกเขาเป็นส่วนหนึ่งของ API ที่ฉันใช้) และ structs ที่แตกต่างกันจำนวนมากที่ใช้มีสมาชิกที่แตกต่างกันและดังนั้นจึงไม่สามารถเปรียบเทียบเป็นรายบุคคลในแบบทั่วไป (กับความรู้ของฉัน) แก้ไข: ฉันโชคไม่ดีติดอยู่กับ C ++ 11 ควรพูดถึงเรื่องนี้ก่อนหน้านี้ ...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.