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 les 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 des membres de tous les types attendus avec un indicateur pour spécifier le type actif.
Approche structurelle :
<code class="cpp">struct HeterogeneousContainer { int i; std::string s; double d; int type; // 0 for int, 1 for string, 2 for double };</code>
Approche syndicale (à utiliser avec prudence) :
<code class="cpp">union HeterogeneousContainer { int i; std::string s; double d; };</code>
Cependant, cette approche présente des limites et des pièges potentiels, tels que :
Conclusion
Lorsque vous êtes confronté à 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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!