Saya ingin menggunakan Windows HANDLE
(pegangan utas) sebagai kunci di std::map
. Untuk ini, saya memerlukan operator kurang dari yang terdefinisi dengan baik untuk tipe HANDLE
.
Jenis penunjuk T*
dapat digunakan sebagai kunci untuk std::map
hanya jika pembanding std::less<T*>
ditentukan, karena operator<(T*, T*)
bawaan (dan selanjutnya std::less<>
) tidak memberikan urutan total.
Dari segi implementasi, kita tahu bahwa HANDLE
sebenarnya diketik sebagai tipe penunjuk. Oleh karena itu, std::less<HANDLE>
sepertinya taruhan yang aman. Tapi saya menganggapnya hanya detail implementasi yang HANDLE
diimplementasikan sebagai tipe pointer. (Dan dengan memeriksa nilai HANDLE
aktual di debugger, terlihat jelas bahwa nilai tersebut bukan nilai penunjuk asli.)
Apakah ada jaminan formal yang dapat diperoleh dari standar C++ dan dokumentasi Windows API yang memungkinkan saya menggunakan HANDLE
sebagai kunci di std::map
?
HANDLE
benar-benar bertipevoid*
. Jika ada total pesanan untukvoid*
, maka Anda dapat menggunakannya sebagai kunci distd::map
. Perlu diingat, bahwa pegangan thread dapat digunakan kembali setelah objek thread dibuang. - person IInspectable   schedule 27.02.2020HANDLE
adalah tipe pointer? - person j6t   schedule 27.02.2020operator<(T*, T*)
bawaan (dan selanjutnyastd::less<>
) tidak memberikan pesanan total. JADI: Kurang universal‹› untuk petunjuk dalam standar C++ Ini tentang C++03 tetapi saya benar-benar ingin tahu apakah fitur/persyaratan berguna seperti itu telah dihapus dari standar yang lebih baru... ;-) - person Scheff's Cat   schedule 27.02.2020HANDLE
diimplementasikan secara spesifik. - person Nicol Bolas   schedule 27.02.2020HANDLE
didokumentasikan sebagaivoid*
, maka tersirat perintah. Ya, pelaksana membatasi diri mereka pada implementasi tertentu (dan menjamin properti---seperti perintah---yang seharusnya tidak diperlukan) dengan mendokumentasikannya secara publik, tapi itu bukan masalah saya;) Sebaliknya, itu sangat berguna. - person j6t   schedule 27.02.2020void*
, dan diwajibkan oleh standar C++ agar pointer memiliki urutan total yang dapat diakses melaluistd::less
... apa masalah Anda? Berapa banyak lagi jaminan formal yang Anda perlukan? - person Nicol Bolas   schedule 27.02.2020