3 つの C++ クラス FooA、FooB、および FooC があるとします。
FooA には という名前のメンバー関数がありHello
ます。クラス FooB でこの関数を呼び出したいのですが、クラス FooC で呼び出せないようにします。これを実現するための最善の方法は、FooB を FooA のフレンド クラスとして宣言することです。しかし、私がこれを行う限り、FooA のすべての非公開および保護されたメンバーが公開され、これは私にはまったく受け入れられません。
friend
したがって、このジレンマを解決できるクラスよりも C++ (03 または 11) に優れたメカニズムがあるかどうかを知りたいです。
そして、次の構文が可能であればいいと思います:
class FooA
{
private friend class FooB:
void Hello();
void Hello2();
private:
void Hello3();
int m_iData;
};
class FooB
{
void fun()
{
FooA objA;
objA.Hello() // right
objA.Hello2() // right
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};
class FooC
{
void fun()
{
FooA objA;
objA.Hello() // compile error
objA.Hello2() // compile error
objA.Hello3() // compile error
ojbA.m_iData = 0; // compile error
}
};