[英]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.