我们可以增强面向密钥的访问保护模式的可重用性吗?
在当前形式中,利用密钥的访问保护模式展示了其可重用性的限制。为了解决这个问题,人们提出了各种增强功能。
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&) = delete; passkey& operator=(const passkey&) = delete; }; #define PASSKEY_FUNCTION(pTag, pFunc, ...) \ struct EXPAND(pTag); \ \ template <> \ class passkey<EXPAND(pTag)> \ { \ private: \ friend pFunc __VA_ARGS__; \ passkey() {} \ \ passkey(const passkey&) = delete; \ passkey& operator=(const passkey&) = delete; \ }
现在,每个类都有其唯一的密钥,并且函数可以指定其允许的密钥。调用者只需创建必要的密钥并调用所需的方法。这种方法通过其通用实现提高了可重用性和灵活性。
以上是能否使面向密钥的访问保护模式更加可重用?的详细内容。更多信息请关注PHP中文网其他相关文章!