簡體   English   中英

在C ++中使內部類成為朋友

[英]make an inner class a friend in C++

我想讓一個內部類成為一個無關類的朋友,但這似乎不起作用(至少在gcc 4.1.2中):

class A {
    int i;
    friend class B; // fine
    friend class B::C; // not allowed?
};

class B {
    int geti(A* ap) { return ap->i; }

    class C {
        int geti(A* ap) { return ap->i; }
    };
};

使用前必須先聲明B::C 以下可能有效。

更新:忽略要求的可用演示,這是一種構造可行的方法(減去成員函數的定義),該方法可以起作用,但請記住,所有內容都是私有的。

class A;

class B
{
  int geti(A * ap);

public:
  class C
  {
    int geti(A * ap);
  };
};

class A
{
  friend class B;    // fine
  friend class B::C; // fine too
  int i;
};

然后在其他地方定義getter函數:

int B::geti(A * ap) { ... }
int B::C::geti(A * ap) { ... }

備選:向前聲明嵌套的類B::C並保存一個外部定義:

class A;

class B
{
  int geti(const A * ap) const; // we cannot use A yet!

public:
  class C;
};

class A
{
  friend class B;    // fine
  friend class B::C; // fine too
  int i;
};

int B::geti(const A * ap) const { return ap->i; }

class B::C
{
  inline int geti(const A * ap) const { return ap->i; }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM