Maison > développement back-end > C++ > Comment puis-je implémenter des identifiants fortement typés avec la vérification de type en C 17 ?

Comment puis-je implémenter des identifiants fortement typés avec la vérification de type en C 17 ?

Linda Hamilton
Libérer: 2024-11-16 08:23:02
original
1065 Les gens l'ont consulté

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

Implémentation d'identifiants fortement typés avec vérification de type

En C 17, vous pouvez implémenter des identifiants fortement typés à l'aide de classes personnalisées qui héritent de l'objet prévu type de base. Cela permet la vérification du type lors de la compilation, empêchant l'affectation de valeurs incompatibles.

Considérez le code suivant :

#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...
}
Copier après la connexion

Dans ce code, string_id est une classe de modèle qui hérite de std : chaîne. Il fournit une méthode value() pour accéder à la valeur de chaîne sous-jacente. Différents types sont utilisés comme balises pour créer des identifiants uniques (par exemple, portal_tag et cake_tag).

Grâce à cette approche, les affectations entre identifiants de différents types sont empêchées par le compilateur. De plus, il prend en charge les opérations standard telles que la comparaison et le hachage, permettant une intégration transparente avec des conteneurs tels que des cartes.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal