Heim >Backend-Entwicklung >C++ >Kann C Daten unterschiedlichen Typs in einem einzigen Container speichern?

Kann C Daten unterschiedlichen Typs in einem einzigen Container speichern?

DDD
DDDOriginal
2024-11-06 03:41:02329Durchsuche

Can C   Store Data of Different Types in a Single Container?

Heterogene Container in C

Frage:

Die STL-Container-Klassifizierungsgrafik legt nahe, dass es keinen STL-Container gibt sowohl variabler Größe als auch heterogen. Fehlt C eine Lösung zum Speichern von Daten verschiedener Typen?

Antwort:

Während C-Container normalerweise für die Aufnahme von Objekten eines einzigen Typs konzipiert sind, gibt es Möglichkeiten dazu verschiedene Datentypen speichern:

  • Zeiger: Verwenden Sie einen Container mit Zeigern auf Objekte einer gemeinsamen Basisklasse, sodass Sie Objekte verschiedener abgeleiteter Typen speichern können.
  • boost::any: Objekte jeglicher Art in einem Container speichern. Dies verwendet einen Template-Metaprogrammierungsansatz, um verschiedene Typen sicher zu verarbeiten.
  • boost::variant: Ähnlich wie boost::any, erfordert jedoch die Angabe der zulässigen Typen zur Kompilierungszeit.

Codebeispiel:

<code class="cpp">#include <list>
#include <boost/any.hpp>

using boost::any_cast;
typedef std::list<boost::any> many;

int main() {
    many values;
    append_int(values, 10);
    append_string(values, "Hello");

    if (is_int(values.front())) {
        int number = any_cast<int>(values.front());
        std::cout << number << std::endl;
    }

    return 0;
}</code>

Das obige ist der detaillierte Inhalt vonKann C Daten unterschiedlichen Typs in einem einzigen Container 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