繁体   English   中英

如何在c++中使用/访问class的内部朋友function?

[英]How to use/access inner friend function of class in c++?

我们可以在 class 中声明和定义一个朋友 function,如下所示

class C
{
    friend void F() {cout<<"inner friend func"<<endl;}
};

如何访问/使用这个内心的朋友功能?

C::F() //error: 'F' is not a member of 'C'
C().F()//error: 'class C' has no member named 'F'

朋友声明将F()声明为非成员 function,然后C::F()C().F()都不起作用。 而且您必须在命名空间 scope 中添加一个声明来调用它,因为它对于名称查找不可见(除了ADL ,但F()没有参数,然后 ADL 不起作用)。

在 class 或 class 模板 X 中的友元声明中首先声明的名称成为 X 的最内层封闭命名空间的成员,但对于查找不可见(除了考虑 X 的参数相关查找),除非命名空间 Z31A11FD140BE4BEFAECD19A 中的匹配声明提供

由非本地 class X 中的元声明引入的名称成为 X 的最内层封闭命名空间的成员,但它们对普通名称查找不可见( 不合格不合格),除非在命名空间 scope 之前提供匹配声明或在 class 定义之后。 这样的名称可以通过考虑命名空间和类的ADL找到。

例如

void F();
class C
{
    friend void F() {cout<<"inner friend func"<<endl;}
};

然后像这样称呼它

F();

居住

将 function 声明为朋友不会使其成为 class 的一部分。 你需要在外面声明它:

#include <iostream>

using std::cout;
using std::endl;

class C
{
    friend void F() {cout<<"inner friend func"<<endl;}
};

void F();

int main() {
    F();
}

或者更好的是,也将定义放在 class 之外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM