首頁 > 後端開發 > C++ > 主體

能否讓面向金鑰的​​存取保護模式更加可重複使用?

Patricia Arquette
發布: 2024-11-27 08:43:09
原創
758 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板