我遇到了一个命名空间类和一个函数之间的友谊问题,如下所示:
如何判断友元函数是否在命名空间之外?
谢谢
namespace NS
{
class Class
{
public:
Class();
virtual ~Class();
private:
void Foo();
friend void Bar(Class&);
};
}
void Bar(NS::Class& c)
{
c.Foo();
}
Run Code Online (Sandbox Code Playgroud)
通过使用范围运算符 ::
friend void ::Bar(Class&);
Run Code Online (Sandbox Code Playgroud)
这告诉编译器Bar在全局范围内.
显然,在使用范围运算符时,Bar函数需要在声明中使用之前friend声明.问题是Bar要声明你需要声明命名空间NS和类NS::Class.
像这样的东西
namespace NS
{
class Class;
}
extern "C"
{
void Bar(NS::Class& c);
}
namespace NS
{
class Class
{
public:
Class();
virtual ~Class();
private:
void Foo() {}
friend void ::Bar(Class&);
};
}
void Bar(NS::Class& c)
{
c.Foo();
}
Run Code Online (Sandbox Code Playgroud)