Хранение указателей на константные объекты в 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 или аналогичный, чтобы сделать передачу прав собственности явной, не пропуская неконстантные ссылки.

Этого достаточно для моего варианта использования, так как мне не нужно показывать поведение итератора - это чисто одноэлементная вставка / выпуск / поиск.

Другие вопросы по тегам