//目标:在AB获得的对象为同一个的时候,只对A暴露imple的todo接口
方法1: 稍显麻烦
class Imple;
class AReference
{
void todo (Imple&);
};
class BReference
{
void todo (Imple&);
};
class Imple
{
//禁止外部获取
class FriendForA
{
friend AReference;
friend Imple;
Imple& parent;
void todo()
{
parent.todo ();
}
FriendForA (Imple& parent) : parent (parent) {}
};
friend FriendForA;
void todo();
public:
FriendForA application()
{
return *this;
}
};
void AReference::todo (Imple& im)
{
//成功
im.application ().todo ();
//错误
im.todo ();
}
void BReference::todo (Imple& im)
{
//错误
im.application ().todo ();
//错误
im.todo ();
}
方法2:强制为保护,且无法制止B用同样的方式获得接口
class Imple;
class AReference
{
class ImpleForA;
void todo (Imple&);
};
class BReference
{
void todo