我們可以增強面向金鑰的存取保護模式的可重複使用性嗎?
在目前形式中,利用金鑰的存取保護模式展示了其可重複使用性的限制。為了解決這個問題,人們提出了各種增強功能。
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中文網其他相關文章!