ฉันต้องการใช้ Windows HANDLE
(ตัวจัดการเธรด) เป็นคีย์ใน std::map
สำหรับสิ่งนี้ ฉันต้องการตัวดำเนินการน้อยกว่าที่กำหนดไว้อย่างชัดเจนสำหรับประเภท HANDLE
ตัวชี้ประเภท T*
สามารถใช้เป็นคีย์สำหรับ std::map
ได้ก็ต่อเมื่อมีการระบุตัวเปรียบเทียบ std::less<T*>
เนื่องจากบิวด์อิน operator<(T*, T*)
(และต่อจากนี้ไป std::less<>
) ไม่ได้จัดเตรียมลำดับทั้งหมด
ในการใช้งาน เรารู้ว่า HANDLE
จริงๆ แล้วพิมพ์defed เป็นประเภทพอยน์เตอร์ ดังนั้น std::less<HANDLE>
จึงดูเหมือนเป็นเดิมพันที่ปลอดภัย แต่ฉันคิดว่ามันเป็นเพียงรายละเอียดการใช้งานที่ HANDLE
ถูกนำไปใช้เป็นประเภทตัวชี้ (และโดยการตรวจสอบค่า HANDLE
จริงในดีบักเกอร์ จะเห็นได้อย่างชัดเจนว่าค่าเหล่านั้นไม่ใช่ค่าตัวชี้ของแท้)
มีการรับประกันอย่างเป็นทางการใด ๆ ที่สามารถได้มาจากมาตรฐาน C ++ และเอกสารประกอบ Windows API ที่จะอนุญาตให้ฉันใช้ HANDLE
เป็นคีย์ใน std::map
หรือไม่
HANDLE
เป็นประเภทvoid*
จริงๆ หากมีคำสั่งซื้อรวมสำหรับvoid*
คุณจะสามารถใช้เป็นคีย์ในstd::map
ได้ โปรดทราบว่าตัวจัดการเธรดจะถูกนำมาใช้ซ้ำหลังจากที่วัตถุเธรดถูกกำจัดไปแล้ว - person IInspectable   schedule 27.02.2020HANDLE
เป็นประเภทตัวชี้ได้หรือไม่ - person j6t   schedule 27.02.2020operator<(T*, T*)
(และต่อจากนี้ไปstd::less<>
) ไม่ได้ให้ลำดับทั้งหมด SO: Universal less‹› สำหรับพอยน์เตอร์ในมาตรฐาน C++ มันเกี่ยวกับ C++03 แต่ฉันสงสัยจริงๆ ว่าฟีเจอร์/ข้อกำหนดที่มีประโยชน์ดังกล่าวได้ถูกลบออกจากมาตรฐานล่าสุดหรือไม่... ;-) - person Scheff's Cat   schedule 27.02.2020HANDLE
ไปใช้อยู่แล้ว - person Nicol Bolas   schedule 27.02.2020HANDLE
ได้รับการบันทึกไว้ว่าเป็นvoid*
จึงมีการระบุคำสั่งซื้อโดยนัย ใช่ ผู้ดำเนินการจำกัดตัวเองอยู่เฉพาะการดำเนินการบางอย่าง (และรับประกันคุณสมบัติ --- เช่น คำสั่ง --- มิฉะนั้นจะไม่จำเป็น) โดยการจัดทำเอกสารต่อสาธารณะ แต่นั่นไม่ใช่ปัญหาของฉัน ;) ในทางตรงกันข้าม มีประโยชน์มาก - person j6t   schedule 27.02.2020void*
และมาตรฐาน C++ กำหนดว่าพอยน์เตอร์มีลำดับทั้งหมดที่เข้าถึงได้ผ่านstd::less
... คุณมีปัญหาอะไร คุณต้องการการรับประกันอย่างเป็นทางการอีกกี่ครั้ง? - person Nicol Bolas   schedule 27.02.2020