我可以将朋友函数/类的定义放在另一个类中吗?我的意思是这样的:
class Foo
{
friend void foo() {} // 1
friend class Bar {}; // 2
};
gcc 编译友元函数,但不能编译友元类。
我可以将朋友函数/类的定义放在另一个类中吗?我的意思是这样的:
class Foo
{
friend void foo() {} // 1
friend class Bar {}; // 2
};
gcc 编译友元函数,但不能编译友元类。
您可以在朋友声明中定义一个friend
函数,它具有任何其他方式都无法获得的有趣行为(在封闭类型是模板的情况下)。
您不能在朋友声明中定义一个friend
类,也没有必要这样做。如果要创建具有完全访问权限的内联新类型,只需创建嵌套类型即可。作为成员,它将拥有对封闭类型的完全访问权限。唯一的区别是在命名空间级别不会找到该类型,但如果需要,您可以添加 typedef(或者,在命名空间级别定义类并在类中声明友谊)。
class Outer {
int x;
class Inner {
static void f( Outer& o ) { o.x = 5; } // fine
};
};
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
};
您可以创建一个嵌套类,根据缺陷报告 45,该类可以访问该类的私有成员。这是你的意思吗?
“嵌套类是一个成员,因此具有与任何其他成员相同的访问权限。”
这可能不适用于所有编译器,因为在此 C++ 标准缺陷报告之前,嵌套类没有被授予特殊访问权限。
将代码更改为:-
class Foo
{
friend void foo() {} // 1
friend class Bar ; // 2
};