Я хочу использовать Windows HANDLE
(дескриптор потока) в качестве ключа в std::map
. Для этого мне нужен оператор «меньше», который четко определен для типа HANDLE
.
Типы указателей T*
могут использоваться в качестве ключей для std::map
, только если указан компаратор std::less<T*>
, потому что встроенный operator<(T*, T*)
(и в дальнейшем std::less<>
) не обеспечивает общий порядок.
С точки зрения реализации мы знаем, что HANDLE
фактически определяется как тип указателя. Таким образом, 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: Универсальный меньше ‹› для указателей в стандарте 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 ++ требует, чтобы указатели имели общий порядок, доступный через _2 _... в чем ваша проблема? Сколько еще официальных гарантий вам нужно? - person Nicol Bolas   schedule 27.02.2020