首页  >  文章  >  后端开发  >  能否使面向密钥的访问保护模式更加可重用?

能否使面向密钥的访问保护模式更加可重用?

Patricia Arquette
Patricia Arquette原创
2024-11-27 08:43:09758浏览

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

我们可以增强面向密钥的访问保护模式的可重用性吗?

在当前形式中,利用密钥的访问保护模式展示了其可重用性的限制。为了解决这个问题,人们提出了各种增强功能。

C 03 改进:

使用宏,我们可以简化和概括模式。 PASSKEY 宏定义特定类或功能的密钥,为管理访问控制提供集中位置。下面是一个示例:

#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)&); \
        }

虽然此方法提高了模式的易用性,但它也有缺点。它要求调用者知道所需的特定密钥,并可能导致宏混乱。

C 0x 增强功能:

在 C 0x 中,该模式可以发挥其最大潜力,感谢到可变参数模板和模板参数啦。这是一个实现:

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; \
        }

现在,每个类都有其唯一的密钥,并且函数可以指定其允许的密钥。调用者只需创建必要的密钥并调用所需的方法。这种方法通过其通用实现提高了可重用性和灵活性。

以上是能否使面向密钥的访问保护模式更加可重用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn