Использование std :: string специализации std :: hash без создания строкового объекта - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть кодовая база, которая широко использует CUDA, которая, к сожалению, поддерживает только C ++ 14 на сегодняшний день.Тем не менее, я все еще хочу использовать string_view, который является функцией C ++ 17.Реализация относительно проста, тем более что мне не требуются функции 'find'.

Однако для работы мне нужно хеширование.Стандарт обязывает, что std :: hash для string_view должен быть равен хешу строки, созданной из string_view (и я намерен полагаться на эту гарантию).Существует ли стандартный способ получения выходных данных из std :: hash без необходимости временного создания строкового объекта, что может привести к неоптимизируемому выделению кучи (по этому пути string-view-lite отправился)?Я бы предпочел не полагаться на копирование алгоритма из конкретной реализации stdlib, так как это может привести к сбою в будущем или уже нарушит компиляцию с более старыми версиями.

В качестве альтернативы, есть ли способ разрешить MSVC (РЕДАКТИРОВАТЬ: v14.16) использовать std :: string_view в C ++ 14-mode, который NVCC также распознает?Было бы замечательно, если бы у Clang и GCC была похожая опция, так как однажды кодовая база могла бы мигрировать из MSVC.

1 Ответ

0 голосов
/ 09 февраля 2019

По моему мнению, вам не повезло, так как вы также предполагаете, что можете имитировать внутреннюю структуру и передавать настроенный объект для выполнения и выглядеть как std::string, что, безусловно, будет более хрупким, чем просто копирование реализации.

Я вижу два варианта:

  • Вы копируете реализацию специализации std::hash<std::string> и помещаете некоторые утверждения с жестко закодированными кейсами, которые могут предупредить вас, если что-то изменится или отличается(скорее неуклюжее решение).

  • вы предоставляете свою собственную хеш-функцию, которая переопределяет std::string единицу, и передаете ее в качестве аргумента шаблона, чтобы вы могли принудительно установить ограничение равности при работес коллекциями STL.

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