В C ++ компилируется следующий код:
std::pair <int, int> x;
static_cast <std::pair <const int, int>*> (&x);
выдает ошибку:
error: invalid static_cast from type ‘std::pair<int, int>*’ to type ‘std::pair<const int, int>*’
Я более или менее понимаю, почему это происходит, поскольку cv-квалификация типа в списке параметров шаблона в принципе может дать "несовместимый" результат. И даже если в этом случае это не так, компилятор не может это узнать.
В любом случае, существует ли нехакский способ выполнить это преобразование ? Я опасаюсь использовать reinterpret_cast
для чего угодно, так как раньше я сталкивался с проблемами типа. Кроме того, я не могу использовать временные файлы, так как это в коде, критичном к производительности.
EDIT:
Вот что я делаю. Я реализую пользовательский интерфейс контейнера, совместимый с std::unordered_map
. Из-за этого его value_type
должен быть pair <const key_type, mapped_type>
. Для некоторой оптимизации мне нужно внутренне сохранить значения как pair <key_type, mapped_type>
, без const
. Однако, если я это сделаю, я не смогу (без reinterpret_cast
) реализовать итераторы над контейнером, поскольку они должны возвращать ссылки на значения, и у меня есть только ссылки на эти неконстантные пары.