キー指向のアクセス保護パターンの再利用性を強化できますか?
現在の形式では、キーを利用したアクセス保護パターンは次のような特徴を持っています。再利用性に制限があります。この問題に対処するために、さまざまな機能強化が提案されています。
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 中国語 Web サイトの他の関連記事を参照してください。