题
由于类的友谊是不是继承C++、什么是最好的方式,以"虚假"?
我是思考的有关暴露的朋友类的私人口,通过受保护的方法中将要继承的基类,但是结果在编写(及维持)的接口相同的两倍。
是否有任何其他的方式?
解决方案
使用 关键 是一个可能的解决方案。
这个想法是,可以解操作的只有如果你有一个 关键...但一个例子是值得的成千上万个词因此,让我们潜水:
// Step 1: The key
class NeedAccess;
namespace details { class Key { friend NeedAccess; Key() {} }; }
// Step 2: NeedAccess
class NeedAccess
{
protected:
static details::Key GetKey() { return details::Key(); }
};
// Step 3: The big one
class BigOne
{
public:
void lockedMethod(details::Key);
};
问题的关键正在复制constructable是最多的讨论。我看不出有什么你可以得到通过防止它。
另一个好处是,可以有几种键,这取决于哪种方法,你要访问,这种方式授予"部分"友谊、和你的"部分"的朋友不能摆弄你的私处,尽管着名的权利要求!
编辑:
这种方法被称为有限的友谊,并讨论了上 comp.郎。c++。主持.
主要利用这个方法比较 私人口, 是的松散耦合的,因为只有前进的声明是必要的。
其他提示
之类的友谊,孩子们要问,有父母做访问它们。
class CrustyNeighbour
{
private:
friend class Bob;
void useWiFi(std::string const& data);
};
class Bob
{
protected:
useWifi(CrustyNeighbour& neighbour,std::string const& data)
{ neighbour.useWiFi(data);}
};
class Mary: public Bob // Bob's offspring
{
void playHalo(WifiOwner& owner) // WifiOwner derived from CrustyNeighbour
{
useWifi(owner,gameData); // use wifi via his/her parent who access to eighbours wifi
}
};
不知道这是不是你已经在考虑,但这里有一个的虚拟朋友示例
不隶属于 StackOverflow