Хранение указателей на константные объекты в boost :: ptr_unordered_map - PullRequest
4 голосов
/ 11 мая 2011

Кажется, я не могу заставить boost::ptr_unordered_map<uint32_t, const Foo> работать - базовая реализация выглядит так, как будто она переводит вещи в void*.

Нужно ли просто прикусить пулю и заставить мои методы, которые обертывают доступ к этому, сделать const_cast<Foo*> при вставке элементов, или я что-то упускаю здесь? Есть ли способ хранить указатели на постоянные объекты (const Foo*)?

1 Ответ

0 голосов
/ 11 мая 2011

Похоже, это невозможно.

Обходной путь - обернуть доступ к ptr_unordered_map.Метод вставки должен взять const auto_ptr, а затем сделать const_cast<Foo*> для его вставки.

Если вы передаете auto_type клиентскому коду при удалении элементов, вам нужно будет распаковать указатель и передатьэто в const auto_ptr или подобное, чтобы сделать передачу собственности явной без утечки неконстантных ссылок.

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

...