簡體   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