由于类的友谊是不是继承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
     }
};

不知道这是不是你已经在考虑,但这里有一个的虚拟朋友示例

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top