Использование std :: shared_ptr <void> для указания на что-либо
Я используюstd::shared_ptr<void>
в моем приложении, чтобы сделать умный указатель, который может указывать на различные типы структур данных, таких как структуры, векторы, матрицы ... в основном на что угодно. Я пытаюсь сопоставить некоторые имена с их структурами данных.
Я выполняю отображение с использованием хеш-таблицы:
std::unordered_map<std::string, std::shared_ptr<void>>
Могу ли я броситьstd::shared_ptr<void>
вернулсяfind()
вернуться кstd::shared_ptr<my_type>
? Если так, то как?
Что еще более важно, это хорошая практика? Это увеличит сложность слишком сильно, поскольку приложение масштабируется? Или есть какой-то другой, совершенно другой, элегантный подход?
РЕДАКТИРОВАТЬ
Вероятно, не может использовать `Boost.Any ', поскольку он использует RTTI.
Также не может использовать базовый класс для всех этих структур данных, так как некоторые из них являются контейнерами STL, такими какstd::vector
.
Оshared_ptr
удалить вопрос, который обсуждается в ответе ниже, я прочитал, что shared_ptr выполняетстирание типа и хранит информацию о типе, чтобы знать, какой деструктор вызывать.
Общие пустые указатели. Почему это работает?
Почему работает std :: shared_ptr <void>
Почему shared_ptr <void> не специализирован?
Но я не уверен в этом.