Heim > Backend-Entwicklung > C++ > Wie kann ich eine starke Typisierung für Bezeichner erreichen und gleichzeitig die Kompatibilität mit Containern wie Karten wahren?

Wie kann ich eine starke Typisierung für Bezeichner erreichen und gleichzeitig die Kompatibilität mit Containern wie Karten wahren?

Mary-Kate Olsen
Freigeben: 2024-11-21 02:22:15
Original
946 Leute haben es durchsucht

How can I achieve strong typing for identifiers while maintaining compatibility with containers like maps?

Strongly Typing mit usings und typedef

Beim Programmieren sorgt Strong Typing dafür, dass Daten gemäß ihrem definierten Typ behandelt werden, wodurch Fehler vermieden werden zu unerwarteten Typkonvertierungen führen. Diese Frage konzentriert sich darauf, eine starke Typisierung für Bezeichner in einem Projekt zu erreichen und gleichzeitig die Funktionalität und Kompatibilität mit Containern wie Karten beizubehalten.

Verwenden von Strukturen zum Erzwingen von Typbeschränkungen

Um diese Anforderungen zu erfüllen , kann eine strukturbasierte Lösung verwendet werden. Der bereitgestellte Code definiert Strukturen (string_id), die Zeichenfolgenwerte mithilfe von Tags mit zusätzlichen Typinformationen kapseln. Diese Tags sind für jeden Bezeichnertyp eindeutig, z. B. portal_tag oder cake_tag. Dies ermöglicht typsichere Vergleiche und gewährleistet, dass Bezeichner verschiedener Typen nicht einander zugeordnet werden können.

Beispielverwendung

using PortalId = string_id<portal_tag>;
using CakeId = string_id<cake_tag>;

PortalId portal_id("2");
CakeId cake_id("is a lie");

// OK, same type
std::map<CakeId, PortalId> p_to_cake; 

// OK, converting a PortalId to a CakeId
std::unordered_map<CakeId, PortalId> hashed_ptocake;
hashed_ptocake.emplace(CakeId("foo"), PortalId("bar"));

// Compiler error, mixing types
p_to_cake[portal_id] = cake_id; // COMPILER ERROR
Nach dem Login kopieren

Zusätzliche Funktionen

Die verbesserte Version des Codes fügt Funktionen für Hash-Maps, Streaming zu Ostream und benutzerdefinierte String-Konvertierungen hinzu. Dies ermöglicht die nahtlose Verwendung typsicherer Bezeichner in einer Vielzahl von Kontexten.

Fazit

Diese Lösung erreicht effektiv eine starke Typisierung für Bezeichner und bewahrt gleichzeitig deren Verwendbarkeit mit Containern. Durch die Verwendung von Strukturen und Tags erzwingt es Typbeschränkungen und verhindert so Fehler aufgrund von Typkonflikten. Die enthaltenen Funktionen bieten zusätzliche Vielseitigkeit und erleichtern die nahtlose Integration in bestehende Codebasen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine starke Typisierung für Bezeichner erreichen und gleichzeitig die Kompatibilität mit Containern wie Karten wahren?. 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