Хранение указателей на константные объекты в boost::ptr_unordered_map
Я не могу сделать boost::ptr_unordered_map<uint32_t, const Foo>
работа - базовая реализация выглядит так, как будто void*
,
Должен ли я просто прикусить пулю и заставить свои методы, обертывающие доступ к этому, сделать const_cast<Foo*>
при вставке предметов, или здесь что-то мне не хватает? Есть ли способ хранить указатели на постоянные объекты (const Foo*
)?
1 ответ
Похоже, это невозможно.
Обходной путь - обернуть доступ к ptr_unordered_map
, Метод вставки должен принять const auto_ptr, а затем сделать const_cast<Foo*>
вставить его.
Если вы передадите auto_type клиентскому коду при удалении элементов, вам нужно будет распаковать указатель и перенести его в const auto_ptr или аналогичный, чтобы сделать передачу прав собственности явной, не пропуская неконстантные ссылки.
Этого достаточно для моего варианта использования, так как мне не нужно показывать поведение итератора - это чисто одноэлементная вставка / выпуск / поиск.