Maison  >  Article  >  développement back-end  >  Comment initialiser des tableaux d'objets C dans un environnement embarqué ?

Comment initialiser des tableaux d'objets C dans un environnement embarqué ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 17:21:03989parcourir

How to Initialize C   Arrays of Objects in an Embedded Environment?

Initialisation du constructeur pour les tableaux C

L'initialisation de tableaux d'objets en C peut être difficile en raison de l'absence d'une syntaxe d'initialisation de tableau similaire à celle-là disponible pour les objets non-tableaux.

Considérez les objets non-tableaux suivants exemple :

struct Foo {
    Foo(int x) { /* ... */ }
};

struct Bar {
    Foo foo;

    Bar() : foo(4) {}
};

Dans cet exemple, le constructeur Bar initialise l'objet membre foo en utilisant la syntaxe d'initialisation : foo(4).

Cependant, pour les tableaux, la situation est différente. La syntaxe suivante est incorrecte :

struct Foo {
    Foo(int x) { /* ... */ }
};

struct Baz {
    Foo foo[3];

    // ??? I know the following syntax is wrong, but what's correct?
    Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};

Solution

Malheureusement, dans le contexte du C 98 (ce qui semble être le cas ici comme le suggère le processeur embarqué limitation), il n'existe aucun moyen de réaliser l'initialisation des membres du tableau à l'aide des initialiseurs de constructeur. La solution de contournement consiste à fournir un constructeur par défaut pour les membres du tableau et à effectuer toute initialisation nécessaire à l'intérieur du constructeur.

Par exemple :

struct Foo {
    Foo() : value(0) { /* ... */ }  // Default constructor with a default value

    Foo(int x) { /* ... */ }
};

struct Baz {
    Foo foo[3];

    Baz() {
        foo[0] = Foo(4);
        foo[1] = Foo(5);
        foo[2] = Foo(6);
    }
};

Bien que cette approche ne soit pas aussi élégante que l'initialisation directe, elle permet de créer et d'initialiser des tableaux d'objets sans recourir à des méthodes d'initialisation externes ou à des constructions STL qui peuvent ne pas être disponibles dans les environnements embarqués.

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