我可以将朋友功能/类的定义放在另一个类中吗?我的意思是这样的:
class Foo
{
friend void foo() {} // 1
friend class Bar {}; // 2
};
gcc编译好友函数,但无法编译好友类。
答案 0 :(得分:6)
你可以在友元声明中定义一个friend
函数,并且它具有无法以任何其他方式获取的有趣行为(在封闭类型为模板的情况下)。
你不能在朋友声明中定义一个friend
类,并且不需要这样做。如果要创建具有完全访问权限的新类型内联,则只需创建嵌套类型即可。作为会员,它将完全访问封闭类型。唯一的区别是在命名空间级别找不到类型,但是如果需要可以添加一个typedef(或者,在命名空间级别定义类,只是在类中声明友谊)。
class Outer {
int x;
class Inner {
static void f( Outer& o ) { o.x = 5; } // fine
};
};
答案 1 :(得分:3)
n3337 11.3 / 2
一个类不在朋友声明中定义。 [例如:
class A { friend class B { }; // error: cannot define class in friend declaration };
- 示例]
但你可以使用像
这样的东西class Foo
{
friend void foo() {} // 1
class Bar { };
friend class Bar; // 2
};
答案 2 :(得分:1)
您可以创建一个嵌套类,according to defect report 45可以访问该类的私有成员。这是你的意思吗?
“嵌套类是成员,因此具有与任何其他成员相同的访问权限。”
这可能不适用于所有编译器,因为在此C ++标准缺陷报告之前,嵌套类没有特殊访问权限。
答案 3 :(得分:0)
将代码更改为: -
class Foo
{
friend void foo() {} // 1
friend class Bar ; // 2
};