递归友元类
recursive friend classes
有什么办法解决这个问题吗:
class B;
class C {
public:
C() { }
private:
int i;
friend B::B();
};
class B {
public:
B() { }
private:
int i;
friend C::C();
};
给出错误:
prog.cpp:8: error: invalid use of incomplete type ‘struct B’
prog.cpp:1: error: forward declaration of ‘struct B’
你就是不能这么做。删除循环依赖项。
根据IBM的文档(我意识到这不是规范性的):
必须先定义类Y,然后才能将Y的任何成员声明为另一个类的朋友。
所以我认为答案是"不"。
当然,你可以使用
friend class B;
而不是friend B::B()
,但这赋予了B的所有成员友谊。你可能已经知道了。
由于您对友谊(访问特定类的特定成员函数)非常挑剔,因此您可能需要律师-客户习语。不过,我不确定这对构造函数的效果如何。
我意识到这是一个非常愚蠢的想法,但从理论上讲,你不能通过继承,通过让父类的构造函数成为朋友来实现这一点吗?代码编译,至少,尽管它可能是有问题的
class A {
public:
A() { }
private:
int i;
};
class D {
public:
D() { }
private:
int i;
};
class B : public A {
public:
B() { }
private:
friend D::D();
};
class C : public D {
public:
C() { }
private:
friend A::A();
};
相关文章:
- 如何基于元组元素进行递归?
- 递归搜索n元树中的元素
- 如何使用 Boost Hana 删除元编程递归
- 使用元编程递归初始化 std::array
- 为模板中的元组创建递归函数
- 以先前的通话递归致电每个元组成员
- 递归中不同参数类型的变元模板函数
- 递归地构建元组
- 模板元编程递归上限
- 元编程和SFINAE/std::enable_if:无限模板递归
- decltype用于递归变元函数模板的返回类型
- 如何使用 R 和 Rcpp 删除 NumericVector 中的元素以进行递归
- C++元编程递归步长限制
- 如何递归元组
- 使用可变参数模板的递归元函数
- 用C++14索引序列可以改进元组变元模板递归吗
- 模板元编程:原始递归
- 重载成员函数访问元组和递归累加结果失败的原因
- 模板递归区分boot::元组中的数据类型
- 递归友元类