基本上,我有以下结构:
class A {
const double x;
class B {
void f() { /* need access to x */ }
};
};
做正确的方法是什么?我考虑在A
类中添加对B
- 父级的引用,但之后我无法为B
使用默认构造函数。
有没有更好的方法或设计?
答案 0 :(得分:0)
一个选项
class A {
public:
int x;
class B {
public:
void foo(int x) {
cout << x;
}
};
B b;
void foo() {
b.foo(x);
}
};
int main() {
A temp;
temp.x = 5;
temp.foo();
return 0;
}
答案 1 :(得分:0)
你可以在第一次尝试时离开并使用A
的强制转换操作符,这样你就不再需要关心B
的构造函数了:
struct A {
struct B {
B(A &a): a{a} {}
void f() { a.x; }
private:
A &a;
};
explicit operator B() {
return B{*this};
}
private:
friend class B;
const double x{0};
};
int main() {
A a;
A::B b = a;
}
请注意,您必须确保a
的生命周期超过b
的生命周期。否则你迟早会在某个地方晃来晃去。