在这种情况下,如何将成员函数设置为好友函数
How to make a member function a friend function in this scenario?
我对如何使用好友函数完成以下任务有点困惑。
假设我有一个类a,它的成员函数'f'要声明为类b的友元。
正常的解决方案是这样的,据我所知:
定义类A,只声明'f'而未定义
定义类B,包括'f'的友元声明
定义f
现在,如果类A具有类类型为B的数据成员或B类型元素的容器(如vector .
前向声明类B似乎有效(即没有编译器警告/错误),但我不确定它是否符合c++ 11标准。此外,这样的解决方案不允许我使用类B的构造函数来为a的类B类型成员提供类内初始化项。在符合c++ 11的情况下,实现所有这些的最佳方法是什么?
我试着从标准本身找到解决方案,但找不到提到这种情况。如果有人能指给我看,我会很高兴的。
PS我真的是一个初学者,所以请不要在你的答案中假设其他。我不介意详细的答案:)
您应该阅读有关此问题的MSDN文章:类成员函数和类作为朋友
基本上你需要做的是有一个类类型A
和一个函数f()
,然后你在类类型B
中声明存在一个函数A::f()
,它将是你的朋友。
MSDN的例子很好地说明了这一点:
class A {
public:
int Func1( B& b );
private:
int Func2( B& b );
};
class B {
private:
int _b;
// A::Func1 is a friend function to class B
// so A::Func1 has access to all members of B
friend int A::Func1( B& );
};
int A::Func1( B& b ) { return b._b; } // OK
int A::Func2( B& b ) { return b._b; } // C2248
相关文章:
- 类中的 Arduino 对象构造函数设置垃圾值
- 将复制构造函数设置为private和=delete有什么区别
- 从C++为字符串函数设置_ENV
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 如何将函数设置为变量并从中调用?
- 如何将一个类函数设置为另一个类函数
- (Raspberry Pi 3)如何使用set()函数设置相机属性(来自raspicam/raspicam_cv.h)
- 如何在不更改代码的情况下为所有C++函数设置属性
- 尝试将构造函数设置为 0 - c++ 的未处理异常
- 是否需要为 C++中的一个或多个函数设置类
- C++构造函数设置值
- 将一个对象的函数设置为由arduino库中的另一个对象调用
- 如何使用模板函数设置不同类型的值
- 我可以为并集的C++函数设置默认参数吗
- 如何从成员函数设置类静态数据成员的值
- C++在通过构造函数初始化对象后,用函数设置私有类成员
- 通过C++中的非静态函数设置对C函数指针的回调
- 如何使用 std::bind 将成员函数设置为回调
- 是否可以在不重载的情况下为每个函数设置可变数量的参数
- 通过调用C++函数设置加载器组件