pra*_*pin 4 c++ friend-function
考虑以下代码:
struct A
{
friend void foo(A& a) {}
};
struct B
{
void foo()
{
A a;
foo(a); // doesn't compile because "foo" friend function is hidden
}
};
int main()
{
A a;
foo(a); // OK here
}
Run Code Online (Sandbox Code Playgroud)
在函数中main,我可以轻松调用foo类内定义的友元函数A。
在函数中,B::foo相同的代码无法编译,因为友元函数通过其成员函数foo隐藏在类内部B。
有没有办法调用原来的隐藏函数而B不用重命名B::foo?我尝试使用::foo(a);orA::foo(a);但它们都不能编译。
有没有办法在不重命名的情况下 调用 B 内部的原始隐藏函数
B::foo?
是的,可以通过在成员函数内添加声明 来实现,如下所示。这也满足了你不想重命名的要求。void foo(A& a)void B::foo()B::foo
基本上我们在这里使用前向声明。
struct A
{
friend void foo(A& a) {}
};
struct B
{
void foo()
{
A a;
void foo(A&); //added this declaration
foo(a); //compiles now
}
};
Run Code Online (Sandbox Code Playgroud)