Stockage d'objets hétérogènes dans des conteneurs C
Les conteneurs C nécessitent généralement des éléments homogènes, ce qui signifie qu'ils ne peuvent contenir que des objets d'un seul type. Cependant, il existe des situations dans lesquelles vous aurez peut-être besoin d'un conteneur pouvant accueillir un mélange de types de données. Cet article explique comment y parvenir en utilisant la bibliothèque boost::any et une approche personnalisée.
Utilisation de boost::any
boost::any est une classe de modèle qui peut contenir n’importe quel type C. En stockant des instances de boost::any dans un conteneur, vous pouvez avoir une collection hétérogène d'objets. Cette approche est recommandée pour sa robustesse et sa gestion des cas extrêmes.
Implémentation personnalisée
Si vous préférez une approche plus manuelle, vous pouvez créer une structure ou une union personnalisée qui combine les membres de tous les types attendus avec un indicateur pour spécifier le type actif.
Approche structurelle :
struct HeterogeneousContainer {
int i;
std::string s;
double d;
int type; // 0 for int, 1 for string, 2 for double
};
Approche Union (à utiliser avec prudence) :
union HeterogeneousContainer {
int i;
std::string s;
double d;
};
Cependant, cette approche présente des limites et des pièges potentiels, tels que :
Conclusion
Lorsque vous faites face la nécessité de stocker des objets hétérogènes dans un conteneur C, pensez à utiliser la bibliothèque boost::any pour sa sécurité et son efficacité. Si vous le souhaitez, une implémentation personnalisée peut être créée à l'aide d'une structure ou d'une union, mais soyez conscient de leurs limites.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3