"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment stocker des objets hétérogènes dans des conteneurs C++ : boost::any ou implémentation personnalisée ?

Comment stocker des objets hétérogènes dans des conteneurs C++ : boost::any ou implémentation personnalisée ?

Publié le 2024-11-08
Parcourir:308

 How to Store Heterogeneous Objects in C   Containers: boost::any or Custom Implementation?

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 :

  • Les syndicats n'autorisent qu'un seul membre actif à la fois.
  • Lecture d'un membre inactif peut entraîner un comportement indéfini.
  • Une manipulation minutieuse est nécessaire pour garantir que le type correct est spécifié et accessible.

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.

Dernier tutoriel Plus>

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