[英]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.