我在一个命名空间类和一个函数之间遇到了友谊问题,如下所示:
如何判断友元函数是否在命名空间之外?
由于
public interface A {}
public class B implements A {}
public static void main(String[] args)
{
A test1 = new B();
B test2 = new B();
}
答案 0 :(得分:5)
使用范围运算符::
friend void ::Bar(Class&);
这告诉编译器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();
}