„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So speichern Sie heterogene Objekte in C++-Containern: boost::any oder benutzerdefinierte Implementierung?

So speichern Sie heterogene Objekte in C++-Containern: boost::any oder benutzerdefinierte Implementierung?

Veröffentlicht am 08.11.2024
Durchsuche:671

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

Heterogene Objekte in C-Containern speichern

C-Container erfordern normalerweise homogene Elemente, was bedeutet, dass sie nur Objekte eines einzigen Typs enthalten können. Es gibt jedoch Situationen, in denen Sie möglicherweise einen Container benötigen, der eine Mischung aus Datentypen aufnehmen kann. In diesem Artikel wird untersucht, wie Sie dies mit der Bibliothek boost::any und einem benutzerdefinierten Ansatz erreichen können.

Verwendung von boost::any

boost::any ist eine Vorlagenklasse das jeden C-Typ aufnehmen kann. Durch das Speichern von boost::any-Instanzen in einem Container können Sie eine heterogene Sammlung von Objekten erstellen. Dieser Ansatz wird aufgrund seiner Robustheit und der Handhabung von Randfällen empfohlen.

Benutzerdefinierte Implementierung

Wenn Sie einen eher manuellen Ansatz bevorzugen, können Sie eine benutzerdefinierte Struktur oder Union erstellen kombiniert Mitglieder aller erwarteten Typen zusammen mit einem Indikator, um den aktiven Typ anzugeben.

Struktur Ansatz:

struct HeterogeneousContainer {
  int i;
  std::string s;
  double d;
  int type; // 0 for int, 1 for string, 2 for double
};

Union-Ansatz (mit Vorsicht verwenden):

union HeterogeneousContainer {
  int i;
  std::string s;
  double d;
};

Dieser Ansatz hat jedoch Einschränkungen und potenzielle Fallstricke, wie zum Beispiel:

  • Gewerkschaften erlauben jeweils nur ein aktives Mitglied.
  • Lesen eines inaktiven Mitglieds kann zu undefiniertem Verhalten führen.
  • Eine sorgfältige Handhabung ist erforderlich, um sicherzustellen, dass der richtige Typ angegeben wird und Zugriff.

Fazit

Wenn Sie heterogene Objekte in einem C-Container speichern müssen, sollten Sie aufgrund ihrer Sicherheit und Effektivität die Verwendung der boost::any-Bibliothek in Betracht ziehen . Bei Bedarf kann eine benutzerdefinierte Implementierung mithilfe einer Struktur oder Union erstellt werden. Beachten Sie jedoch deren Einschränkungen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3