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.