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:
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.
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