Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann ich stark typisierte Bezeichner mit Typprüfung in C 17 implementieren?

Linda Hamilton
Freigeben: 2024-11-16 08:23:02
Original
956 Leute haben es durchsucht

How Can I Implement Strongly Typed Identifiers with Type Checking in C  17?

Implementierung stark typisierter Bezeichner mit Typprüfung

In C 17 können Sie stark typisierte Bezeichner mithilfe benutzerdefinierter Klassen implementieren, die von den beabsichtigten erben Basistyp. Dies ermöglicht eine Typprüfung während der Kompilierung und verhindert die Zuweisung inkompatibler Werte.

Bedenken Sie den folgenden Code:

#include <iostream>
#include <string>
#include <map>

struct portal_tag {};
struct cake_tag {};

template<class Tag>
struct string_id : public std::string {
    string_id(std::string s) : _value(std::move(s)) {}
    const std::string& value() const { return _value; }
private:
    std::string _value;
};

// Type aliases for convenience
using PortalId = string_id<portal_tag>;
using CakeId = string_id<cake_tag>;

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

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

    p_to_cake[cake_id] = portal_id; // OK
    // p_to_cake[portal_id] = cake_id; // Compile error

    // portal_id = cake_id; // Compile error
    // portal_id = "1.0"; // Compile error
    portal_id = PortalId("42"); // OK

    // ... Additional operations...
}
Nach dem Login kopieren

In diesem Code ist string_id eine Vorlagenklasse, die von std erbt: Zeichenfolge. Es stellt eine value()-Methode bereit, um auf den zugrunde liegenden String-Wert zuzugreifen. Als Tags werden verschiedene Typen verwendet, um eindeutige Bezeichner zu erstellen (z. B. portal_tag und cake_tag).

Mit diesem Ansatz werden Zuweisungen zwischen Bezeichnern verschiedener Typen durch den Compiler verhindert. Darüber hinaus unterstützt es Standardoperationen wie Vergleich und Hashing und ermöglicht so eine nahtlose Integration mit Containern wie Karten.

Das obige ist der detaillierte Inhalt vonWie kann ich stark typisierte Bezeichner mit Typprüfung in C 17 implementieren?. 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