Я хотел бы использовать boost::any
как универсальный тип для хранения в контейнере и для перехода к различным функциям. Но внутри этих функций я всегда знаю реальный тип, поэтому во время выполнения мне не нужны никакие проверки безопасности типов и накладные расходы, static_cast
достаточно.
Идеальным решением было бы использовать что-то вроде boost::polymorphic_downcast
, но, как я вижу, это не может быть применено в этом случае.
Должен ли я просто написать свою собственную обертку для void*
или есть другой вариант?
Вы можете использовать shared_ptr<void>
или unique_ptr с static_cast
заменить boost::any
, shared_ptr<void>
имеет несколько преимуществ перед сырьем void*
указатель как:
Но, конечно, в этом случае вам нужно больше памяти для каждого указателя (для подсчета и удаления ссылок).
если совместное использование не подходит для вас и ваш объект будет принадлежать только в контейнере, вы также можете использовать unique_ptr<void>
,
Других решений пока нет …