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 Vereinigung erstellen kombiniert Mitglieder aller erwarteten Typen zusammen mit einem Indikator, um den aktiven Typ anzugeben.
Strukturansatz:
<code class="cpp">struct HeterogeneousContainer { int i; std::string s; double d; int type; // 0 for int, 1 for string, 2 for double };</code>
Union-Ansatz (mit Vorsicht verwenden) :
<code class="cpp">union HeterogeneousContainer { int i; std::string s; double d; };</code>
Dieser Ansatz weist jedoch Einschränkungen und potenzielle Fallstricke auf, 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.
Das obige ist der detaillierte Inhalt vonSo speichern Sie heterogene Objekte in C-Containern: boost::any oder benutzerdefinierte Implementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!