Maison  >  Article  >  développement back-end  >  Comment simuler des constructeurs statiques en C ?

Comment simuler des constructeurs statiques en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 17:07:02778parcourir

How to Simulate Static Constructors in C  ?

Initialisation statique en C : une alternative aux constructeurs statiques

En C, l'initialisation des membres de données statiques privées peut poser un défi en raison du manque de constructeurs statiques. Cependant, il existe une solution élégante qui reflète les fonctionnalités des constructeurs statiques dans d'autres langages.

Utiliser une classe séparée

Pour simuler l'initialisation statique, créez une classe ordinaire distincte pour contenir les données statiques et déclarer une instance statique de cette classe dans la classe qui l'exige. Par exemple :

// StaticStuff class holds static data
class StaticStuff {
    std::vector<char> letters_;

public:
    // Constructor initializes data
    StaticStuff() {
        for (char c = 'a'; c <= 'z'; c++)
            letters_.push_back(c);
    }

    // Provide access to static data
    std::vector<char>& letters() { return letters_; }
};

// Class that uses static data
class C {
    // Static instance of StaticStuff (initialized once)
    static StaticStuff staticStuff;
};

Dans cet exemple, StaticStuff contient les données statiques letter_ et son constructeur l'initialise lors de la première instanciation. L'instance statique staticStuff est déclarée en C, permettant d'accéder aux données statiques depuis la classe C.

Avantages

Cette approche offre plusieurs avantages :

  • Isolement de l'initialisation : Il sépare le code d'initialisation du constructeur de classe, réduisant ainsi complexité.
  • Comportement de type Singleton : L'instance statique garantit que les données ne sont initialisées qu'une seule fois, même lorsque plusieurs instances de la classe sont créées.
  • Accès aux membres privés : La classe StaticStuff peut accéder aux membres privés de C via des déclarations d'amis ou des fonctions getter publiques.

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