ตัวดำเนินการ <(HANDLE, HANDLE) หรือ std::less‹HANDLE› มีการกำหนดไว้อย่างดีหรือไม่

ฉันต้องการใช้ 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 หรือไม่


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