ホームページ > バックエンド開発 > C++ > キー指向のアクセス保護パターンをより再利用可能にすることはできますか?

キー指向のアクセス保護パターンをより再利用可能にすることはできますか?

Patricia Arquette
リリース: 2024-11-27 08:43:09
オリジナル
760 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート