C++ 之间的循环依赖 类
Circular Dependencies between C++ classes
我在 this 问题中读到
If you really have a model where A contains B and B contains A then these classes appear to be incapable of living without each other. In which case perhaps you only really have one class and not two.
如果 A 可能 包含 B,但 B 应该始终引用 A(没有 A 就不能存在 B)会怎样?
为了说明,这里有一个 Cube class,它可能包含 Collider class 的对象(IE:其他带有碰撞器的立方体应该与它发生碰撞)。
class Cube
{
public:
Cube();
~Cube();
Collider collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
在这种情况下,Cube 和 Collider 实际上应该是两个独立的 classes,如何避免循环依赖同时仍然能够存储对 Cube[ 的引用=27=] 在 Collider?
编辑:此问题已得到解答。但是,是否有人愿意让我知道为什么这个问题被否决了,这样我以后会改变我的提问方式?复制?没有足够的信息?太多的初学者问题?请告诉我:)
class Collider;
class Cube
{
public:
Collider* collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
声明Collider的存在,稍后定义。 C(++) 允许指向不完整类型的指针。
这里是 more info about forward declaration.
你可以做前向申报。参见 wikipedia and this question。
有关示例的代码,请参阅@Ivan Rubinson 的回答。
我在 this 问题中读到
If you really have a model where A contains B and B contains A then these classes appear to be incapable of living without each other. In which case perhaps you only really have one class and not two.
如果 A 可能 包含 B,但 B 应该始终引用 A(没有 A 就不能存在 B)会怎样?
为了说明,这里有一个 Cube class,它可能包含 Collider class 的对象(IE:其他带有碰撞器的立方体应该与它发生碰撞)。
class Cube
{
public:
Cube();
~Cube();
Collider collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
在这种情况下,Cube 和 Collider 实际上应该是两个独立的 classes,如何避免循环依赖同时仍然能够存储对 Cube[ 的引用=27=] 在 Collider?
编辑:此问题已得到解答。但是,是否有人愿意让我知道为什么这个问题被否决了,这样我以后会改变我的提问方式?复制?没有足够的信息?太多的初学者问题?请告诉我:)
class Collider;
class Cube
{
public:
Collider* collider; //Optional Collider
}
class Collider
{
public:
Collider(Cube & parentReference) : parent(parentReference) {}
private:
Cube & parent;
}
声明Collider的存在,稍后定义。 C(++) 允许指向不完整类型的指针。 这里是 more info about forward declaration.
你可以做前向申报。参见 wikipedia and this question。
有关示例的代码,请参阅@Ivan Rubinson 的回答。