Usando std :: shared_ptr <void> para apontar para qualquer coisa

Estou usando umstd::shared_ptr<void> na minha aplicação, para fazer um ponteiro inteligente que possa apontar para muitos tipos diferentes de estruturas de dados, como estruturas, vetores, matrizes ... basicamente qualquer coisa. O que estou tentando fazer é mapear alguns nomes para suas estruturas de dados.

Estou realizando o mapeamento usando uma hashtable:

std::unordered_map<std::string, std::shared_ptr<void>>

Posso lançar ostd::shared_ptr<void> retornado porfind() de volta astd::shared_ptr<my_type>? Se sim, como?

Mais importante, essa é uma boa prática? Isso aumentará muito a complexidade conforme o aplicativo é escalado? Ou existe alguma outra abordagem elegante e completamente diferente?

EDITAR

Provavelmente não pode usar o Boost.Any porque ele usa RTTI.

Também não pode usar uma classe base para todas essas estruturas de dados, pois algumas delas são contêineres STL comostd::vector.

Sobre ashared_ptr Para excluir o problema discutido em uma resposta abaixo, li que shared_ptr executatipo apagamento e armazena informações de tipo para saber qual destruidor chamar.

Ponteiros nulos compartilhados. Por que isso funciona?

Por que std :: shared_ptr <void> funciona

Por que shared_ptr <void> não é especializado?

Mas não tenho certeza disso.

questionAnswers(4)

yourAnswerToTheQuestion