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

Können C-Container Daten verschiedener Typen speichern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 06:34:01976Durchsuche

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>

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>

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>

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!

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