Heim > Backend-Entwicklung > C++ > Können C-Container Daten verschiedener Typen speichern?

Können C-Container Daten verschiedener Typen speichern?

Mary-Kate Olsen
Freigeben: 2024-11-05 06:34:01
Original
1018 Leute haben es durchsucht

Can C   Containers Store Data of Different Types?

Heterogene Container in C

Bei der STL-Containerklassifizierung bleiben einige Anforderungen unerfüllt, nämlich variable Größe und Heterogenität (Daten unterschiedlichen Typs) . Es ist berechtigt zu fragen, ob C Lösungen für diesen Anwendungsfall bietet.

Normalerweise sind C-Container für die Aufnahme von Objekten eines einzelnen Typs konzipiert, Sie können jedoch Zeiger oder boost::any verwenden, um verschiedene Typen aufzunehmen:

Zeiger verwenden:

Sie können einen Container mit Zeigern auf den Basistyp speichern, sodass Sie von diesem Typ abgeleitete Objekte speichern können:

<code class="cpp">std::vector<MyBaseType*>;</code>
Nach dem Login kopieren

Verwenden von boost::any:

Boost bietet boost::any, mit dem Sie Objekte jeglicher Art sicher speichern können:

<code class="cpp">using boost::any_cast;
typedef std::list<boost::any> many;</code>
Nach dem Login kopieren

Sie können sie dann verwenden any_cast, um die Objekte in die gewünschten Typen umzuwandeln.

Verwendung von boost::variant:

Boost::variant ist eine weitere Option, mit der Sie einen Satz zulässiger Elemente angeben können Typen:

<code class="cpp">std::vector<boost::variant<unsigned, std::string>>;</code>
Nach dem Login kopieren

Es ist jedoch wichtig zu beachten, dass boost::any und boost::variant im Vergleich zu Standard-STL-Containern einen gewissen Leistungs- und Speicheraufwand haben.

Das obige ist der detaillierte Inhalt vonKönnen C-Container Daten verschiedener Typen speichern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage