Heim > Backend-Entwicklung > C++ > Wie kann ich C-Enums als Flags ohne externe Bibliotheken verwenden?

Wie kann ich C-Enums als Flags ohne externe Bibliotheken verwenden?

Barbara Streisand
Freigeben: 2024-12-13 00:35:15
Original
794 Leute haben es durchsucht

How Can I Use C   Enums as Flags Without External Libraries?

Aufzählungen als Flags in C ohne externe Bibliotheken verwenden

Die Möglichkeit, Aufzählungen als Flags zu behandeln, wie sie in C# über die [Flags] verfügbar sind Attribut ist eine praktische Funktion zur Darstellung einer bitweisen Kombination von Werten. Die Implementierung dieser Funktionalität in C erfordert einen etwas anderen Ansatz.

Um dies zu erreichen, besteht eine Methode darin, bitweise Operatoren für die Aufzählung zu definieren und so eine typsichere Möglichkeit zum Kombinieren von Flag-Werten bereitzustellen. So geht's:

enum AnimalFlags
{
    HasClaws = 1,
    CanFly = 2,
    EatsFish = 4,
    Endangered = 8
};

inline AnimalFlags operator|(AnimalFlags a, AnimalFlags b)
{
    return static_cast<AnimalFlags>(static_cast<int>(a) | static_cast<int>(b));
}
Nach dem Login kopieren

Definieren Sie nach Bedarf zusätzliche Operatoren (z. B. &, ^). Wenn der Enum-Bereich den Bereich von int überschreitet, passen Sie die Umwandlungsvorgänge entsprechend an.

Mit diesem Ansatz können Sie jetzt die Enum-Werte als Flags verwenden und so die Typsicherheit gewährleisten. Zum Beispiel:

struct Animal
{
    AnimalFlags flags;
    ...
};

int main()
{
    Animal seahawk;
    seahawk.flags = CanFly | EatsFish | Endangered;
    // seahawk.flags = HasMaximizeButton; // Compile error
    ...
}
Nach dem Login kopieren

Dies ermöglicht Ihnen die sichere Kombination von Flag-Werten und verhindert falsche Zuweisungen wie die Zuweisung des Fenster-Flags HasMaximizeButton zu den Flags des Tieres.

Das obige ist der detaillierte Inhalt vonWie kann ich C-Enums als Flags ohne externe Bibliotheken verwenden?. 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