Heim > Backend-Entwicklung > C++ > Hauptteil

Wie initialisiere ich statische Mitglieder ohne Instanzen oder abgeleitete Klassen in C?

Mary-Kate Olsen
Freigeben: 2024-11-01 10:18:30
Original
712 Leute haben es durchsucht

How to Initialize Static Members Without Instances or Derived Classes in C  ?

So erzwingen Sie die Initialisierung eines statischen Mitglieds ohne Instanzmanipulation oder Beteiligung abgeleiteter Klassen

Stellen Sie sich ein Szenario vor, in dem Sie eine statische Klasse initialisieren möchten Mitglied, wenn eine bestimmte Klasse instanziiert wird, auch ohne Instanzen zu erstellen oder die abgeleitete Klasse einzubeziehen. Lassen Sie uns Strategien erkunden, um dies zu erreichen:

Verwendung eines Vorlagentricks

Die Einführung eines Vorlagentricks kann die Initialisierung statischer Elemente erzwingen, ohne dass Instanzen erforderlich sind oder die abgeleitete Klasse geändert wird. Durch die Erstellung einer speziellen Vorlagenklasse namens „value“, die eine Ganzzahlreferenz und deren Wert als Parameter verwendet, können Sie das gewünschte Ergebnis erzielen.

<code class="cpp">template<typename T, T> struct value { };

template<typename T>
struct HasStatics {
  static int a; // We enforce initialization
  typedef value<int&, a> value_user;
};

template<typename T>
int HasStatics<T>::a = /* Desired side-effect */;</code>
Nach dem Login kopieren

Ausnutzung von Syntaxmehrdeutigkeiten

Ein anderer Ansatz besteht darin, die Mehrdeutigkeit in der C-Syntax auszunutzen. Durch die Verwendung einer cleveren Kombination aus Typedef und verschachtelter Aufzählung können Sie die Initialisierung mehrerer statischer Elemente erzwingen, ohne die abgeleitete Klasse zu beeinträchtigen.

<code class="cpp">template<typename T, T> struct var { enum { value }; };
typedef char user;

template<typename T>
struct HasStatics {
  static int a; // We enforce initialization
  static int b; // And this one too

  // Syntax Shenanigans
  user :var<int&, a>::value,
       :var<int&, b>::value;
};

template<typename T>
int HasStatics<T>::a = /* Desired side-effect */;

template<typename T>
int HasStatics<T>::b = /* Desired side-effect */;</code>
Nach dem Login kopieren

Diese Techniken bieten effiziente Methoden zum Initialisieren statischer Elemente, ohne dass Instanzmanipulationen erforderlich sind oder abgeleitete Klassenänderungen.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich statische Mitglieder ohne Instanzen oder abgeleitete Klassen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!