友谊和命名空间的问题
friendship and namespace issue
我在命名空间类和函数之间的友谊方面遇到了麻烦,如下所示:
如何判断友元函数在命名空间之外?
感谢namespace NS
{
class Class
{
public:
Class();
virtual ~Class();
private:
void Foo();
friend void Bar(Class&);
};
}
void Bar(NS::Class& c)
{
c.Foo();
}
通过使用范围操作符::
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();
}
相关文章:
- 有关命名空间和模板参数的名称的问题
- 命名空间范围问题
- 在 c++ 中定义命名空间中模板类的友元函数时出现问题
- 从命名空间嵌入资源的问题(C++和CMake)
- 与自定义命名空间一起使用时实现 std::error_category、名称解析问题
- 关于"使用命名空间标准"的问题?
- 更改命名空间以自定义 Boost XML 的标记名称后的反序列化问题
- 有关通过派生类在命名空间内继承的问题
- C++相同的命名空间问题
- 是详细命名空间中的使用指导性的问题
- 命名空间内类的循环依赖问题
- 命名空间外部变量的未定义参考/多重定义,C 结构问题
- C++11 中的命名空间问题?
- C++中的编译错误可能是命名空间问题
- 命名空间问题:前向声明和混合命名空间
- C++命名空间问题
- C++ 全局命名空间编译问题
- 如何解决无法使用命名空间 std 的问题;在C++
- VS2013 在未命名命名空间中遇到基类问题
- LLVM设置函数传递的问题-命名空间问题