Maison  >  Article  >  développement back-end  >  C peut-il stocker des données de différents types dans un seul conteneur ?

C peut-il stocker des données de différents types dans un seul conteneur ?

DDD
DDDoriginal
2024-11-06 03:41:02288parcourir

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

Conteneurs hétérogènes en C

Question :

Le graphique de classification des conteneurs STL suggère qu'il n'y a pas de conteneur STL qui soit à la fois de taille variable et hétérogène. Est-ce que C manque d'une solution pour stocker des données de différents types ?

Réponse :

Bien que les conteneurs C soient généralement conçus pour contenir des objets d'un seul type, il existe des moyens de stocker différents types de données :

  • Pointeurs : Utiliser un conteneur de pointeurs vers des objets d'une base commune classe, vous permettant de stocker des objets de différents types dérivés.
  • boost::any: Stockez des objets de n'importe quel type dans un conteneur. Cela utilise une approche de métaprogrammation de modèles pour gérer différents types en toute sécurité.
  • boost::variant: Similaire à boost::any, mais nécessite de spécifier les types autorisés au moment de la compilation.

Exemple de code :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn