课堂内朋友的定义

时间:2012-08-29 16:07:17

标签: c++

我可以将朋友功能/类的定义放在另一个类中吗?我的意思是这样的:

class Foo
{
    friend void foo() {} // 1
    friend class Bar {}; // 2
};

gcc编译好友函数,但无法编译好友类。

4 个答案:

答案 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 
};