Maison > développement back-end > C++ > Les modèles de protection d'accès axés sur les clés peuvent-ils être rendus plus réutilisables ?

Les modèles de protection d'accès axés sur les clés peuvent-ils être rendus plus réutilisables ?

Patricia Arquette
Libérer: 2024-11-27 08:43:09
original
781 Les gens l'ont consulté

Can Key-Oriented Access Protection Patterns Be Made More Reusable?

Pouvons-nous améliorer la réutilisabilité du modèle de protection d'accès orienté clé ?

Dans sa forme actuelle, le modèle de protection d'accès utilisant des clés présente limites dans sa réutilisation. Pour résoudre ce problème, diverses améliorations ont été proposées.

Améliorations C 03 :

À l'aide de macros, nous pouvons simplifier et généraliser le modèle. Les macros PASSKEY définissent des clés d'accès pour des classes ou des fonctions spécifiques, fournissant ainsi un emplacement centralisé pour la gestion du contrôle d'accès. Voici un exemple :

#define PASSKEY_1(pKeyname, pFriend1)                             \
        class EXPAND(pKeyname)                                    \
        {                                                         \
        private:                                                  \
            friend EXPAND(pFriend1);                              \
            EXPAND(pKeyname)() {}                                 \
                                                                  \
            EXPAND(pKeyname)(const EXPAND(pKeyname)&);            \
            EXPAND(pKeyname)& operator=(const EXPAND(pKeyname)&); \
        }
Copier après la connexion

Bien que cette méthode améliore la facilité d'utilisation du modèle, elle présente des inconvénients. Cela oblige les appelants à connaître le mot de passe spécifique requis et peut conduire à un encombrement macro.

Améliorations C 0x :

En C 0x, le modèle peut atteindre son plus grand potentiel grâce aux modèles variadiques et aux amis des paramètres de modèle. Voici une implémentation :

template <typename T>
class passkey
{
private:
    friend T; // Now possible in C++0x
    passkey() {}

    // Noncopyable
    passkey(const passkey&amp;) = delete;
    passkey&amp; operator=(const passkey&amp;) = delete;
};

#define PASSKEY_FUNCTION(pTag, pFunc, ...)               \
        struct EXPAND(pTag);                             \
                                                         \
        template <>                                      \
        class passkey<EXPAND(pTag)>                      \
        {                                                \
        private:                                         \
            friend pFunc __VA_ARGS__;                    \
            passkey() {}                                 \
                                                         \
            passkey(const passkey&amp;) = delete;            \
            passkey&amp; operator=(const passkey&amp;) = delete; \
        }
Copier après la connexion

Maintenant, chaque classe a sa clé d'accès unique et les fonctions peuvent spécifier leurs clés d'accès autorisées. Les appelants créent simplement le mot de passe nécessaire et invoquent la méthode souhaitée. Cette approche offre une réutilisabilité et une flexibilité accrues grâce à sa mise en œuvre générique.

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