Практически безопасно лить контейнер T * в контейнер const T *? - PullRequest
0 голосов
/ 02 мая 2018

Например,

std::vector<SomeNonCopyableType*> values = getVector();
auto &cvalues = reinterpret_cast<std::vector<const SomeNonCopyableType*>&>(values);

// use cvalues...

Это не разрешено в стандарте, конечно. Однако постоянство указанного типа не будет иметь никакого значения в деталях реализации, если они не специализированы. Могу ли я в этом случае считать это преобразование практически безопасным?

Если это плохая идея, есть ли изящный способ сделать контейнер указателя на const из контейнера указателя на неконстантный без копирования?

1 Ответ

0 голосов
/ 02 мая 2018

Практически говоря, да, но это не то, что вы должны делать. Вместо псевдонима контейнера используйте его тип const_iterator для работы с диапазоном элементов, содержащихся в контейнере. (Вы можете использовать экспериментальную std::experimental::ranges::Range структуру, чтобы помочь с этим, если хотите.)

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