Элегантный способ получить value_type из ссылочного контейнера C ++ - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу получить значение_типа из ссылочного контейнера (например, std::string& str)

Единственный способ, которым я смог это сделать, - сначала удалить ссылку, а затем получить доступ к базовому типу следующим образом:

std::unordered_set<std::remove_reference_t<decltype(str)>::value_type>

Если бы я использовал C ++ 11, это было бы еще хуже:

std::unordered_set<std::remove_reference<decltype(str)>::type::value_type>

Я считаю его слишком многословным и не очень чистым.

Есть ли в STL какой-либо шаблон, который делает этот вид работы более понятным?

1 Ответ

0 голосов
/ 13 апреля 2020

C ++ 20 добавляет псевдонимы итератора , которые позволяют вам делать это точно в сочетании с std::begin и его родными элементами.

Следующие имена value_type всего c вы можете получить начальный итератор, включая устаревшие встроенные массивы:

std::itr_value_t<decltype(std::begin( c ))>;

Это только немного короче, так что, возможно, сделайте метафункцию шаблона.

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