ここによって通話任意の派生クラスやオブジェクト許可、アクセスのように「保護」を与えるへのアプローチです。これは私の考えではありません
struct A
{
protected:
//Zero sized struct which allows only derived classes to call privileged methods
struct DerivedOnlyAccessToken{};
public: //public in the normal sense :
void foo() {}
public: //For derived types only :
void privilegedStuff(DerivedOnlyAccessToken aKey);
};
struct B: A
{
void doPrivelegedStuff(A& a)
{
//Can create a token here
a.privilegedStuff(DerivedOnlyAccessToken());
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.foo();
a.privilegedStuff(A::DerivedOnlyAccessToken()); // compile error.
B b;
b.doPrivelegedStuff(a);
return 0;
}
: それは特権メソッドアンロックに必要な保護されたトークンタイプを使用しています。私はそれをいくつかの場所で読んだ。申し訳ありませんが、私はそれが狡猾なアイデアを思い出しません。
私はコンパイラがaKeyパラメータを削除できると期待しています。
なぜ 'B :: bar'は' A :: foo'を呼び出す必要がありますか? 'A :: foo'が保護されていると、それは' A'型のオブジェクトと 'A'から派生した型だけがそれを呼び出せなければならないことを意味するはずです。無関係なクラスから 'A :: foo'を本当に呼び出す必要があるのであれば、おそらく保護されるべきではありません。 –
そして何が問題なのですか? –
'B'が' A'の型であるときに 'B'に' A'インスタンスを渡す理由は何ですか? – birryree