Armazenando objetos heterogêneos em contêineres C
Contêineres C normalmente requerem elementos homogêneos, o que significa que eles só podem conter objetos de um único tipo. No entanto, há situações em que você pode precisar de um contêiner que possa acomodar uma combinação de tipos de dados. Este artigo explora como conseguir isso usando a biblioteca boost::any e uma abordagem personalizada.
Usar boost::any
boost::any é uma classe de modelo que pode conter qualquer tipo C. Ao armazenar instâncias de boost::any em um contêiner, você pode ter uma coleção heterogênea de objetos. Essa abordagem é recomendada por sua robustez e tratamento de casos extremos.
Implementação personalizada
Se preferir uma abordagem mais manual, você pode criar uma estrutura ou união personalizada que combina membros de todos os tipos esperados junto com um indicador para especificar o tipo ativo.
Abordagem de estrutura:
struct HeterogeneousContainer {
int i;
std::string s;
double d;
int type; // 0 for int, 1 for string, 2 for double
};
Abordagem Union (use com cautela):
union HeterogeneousContainer {
int i;
std::string s;
double d;
};
No entanto, essa abordagem tem limitações e possíveis armadilhas, como:
Conclusão
Ao enfrentar a necessidade de armazenar objetos heterogêneos em um contêiner C, considere usar a biblioteca boost::any para sua segurança e eficácia. Se desejar, uma implementação personalizada pode ser criada usando uma estrutura ou união, mas esteja atento às suas limitações.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3