[英]Friend function not found by inner class in Type Erasure setup C++
[英]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.