假设我有三个 C++ 类 FooA、FooB 和 FooC。
FooA 有一个名为 Hello
的成员函数,我想在 FooB 类中调用该函数,但我不希望 FooC 类能够调用它。我能想出实现这一点的最好方法是将 FooB 声明为 FooA 的 friend 类。但只要我这样做,所有 FooA 的私有(private)成员和 protected 成员都会暴露出来,这对我来说是非常 Not Acceptable 。
所以,我想知道 C++(03 或 11)中是否有比 friend
类更好的机制来解决这个难题。
如果可以使用以下语法,我认为会很好:
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
}
};
最佳答案
没有什么可以让一个类成为一个特定函数的 friend ,但是你可以让 FooB
成为一个具有私有(private)构造函数的“关键”类的 friend ,然后让 FooA::Hello
将该类作为忽略的参数。 FooC
将无法提供参数,因此无法调用 Hello
:
Is this key-oriented access-protection pattern a known idiom?
关于c++ - 允许 "friend"类仅访问一些私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16055616/