Является ли один из операторов <(HANDLE, HANDLE) или std :: less <HANDLE>хорошо определенным? - PullRequest
2 голосов
/ 27 февраля 2020

Я хочу использовать 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...