如何有效地从 object 访问 parent object 的 parent?
How to access parent object's parent from an object efficiently?
抱歉标题定义错误。我的意思是:
(顺便说一句,我正在开发游戏引擎,A 是 场景 ,B 是 游戏 Objects和 C 是 组件)
我有3个类:A、B、C
- A包含B,B包含C。
- A 和 B 相互引用。
- B 和 C 相互引用。
(A 在 B 的 header 中前向声明,并包含在 B 的实现中)
是这样的:A <-> B <-> C
我的情况是这样的:
我想从C使用A的方法。(比如告诉主容器添加另一个B等)
~我想做一个可重用的函数,它调用 parent object 的 parent 的方法。
比如C的派生类我不用关心C是怎么到达A的,直接调用C的Reach-A-and-do-something方法就可以了
我的问题是我应该使用哪一个以及为什么(或者有更好的?):
在 C 中:GetB().GetA().DoSomething()
C 的 DoSomething() 调用 B 的 DoSomething(),后者调用 A 的 DoSomething。
第一个对我来说看起来更好,但在 C 的实现中我只包含 B 的 header,其中 A 仅向前声明 。所以我不能使用 A 的方法 除非在 C 中明确包含它。(这是一种不好的做法,还是我应该只包含它?)
第二个开销很大。如果我想使用 A 的 XY 方法,我必须在 B 中创建一个调用 A 的 XY 的 XY 方法,并且我必须在 C 中创建一个调用 B 的 XY 的 XY 方法。
所以我不知道我应该如何从较低的元素到达层次结构中的较高元素。
最好的解决方案是什么?
In C: GetB().GetA().DoSomething()
C's DoSomething() calls B's
DoSomething() which calls A's DoSomething.
我认为两者都是错误的,因为从架构的角度来看,这种方法在 类 之间创建了强耦合。考虑使用事件调度程序,它为您的逻辑实现 Observer 模式。让组件相互发送事件并对其作出反应。
我不确定这在您的情况下如何在性能方面发挥作用,但我强烈建议您不要 premature optimization,除非它很明显。
抱歉标题定义错误。我的意思是:
(顺便说一句,我正在开发游戏引擎,A 是 场景 ,B 是 游戏 Objects和 C 是 组件)
我有3个类:A、B、C
- A包含B,B包含C。
- A 和 B 相互引用。
- B 和 C 相互引用。
(A 在 B 的 header 中前向声明,并包含在 B 的实现中)
是这样的:A <-> B <-> C
我的情况是这样的:
我想从C使用A的方法。(比如告诉主容器添加另一个B等)
~我想做一个可重用的函数,它调用 parent object 的 parent 的方法。
比如C的派生类我不用关心C是怎么到达A的,直接调用C的Reach-A-and-do-something方法就可以了
我的问题是我应该使用哪一个以及为什么(或者有更好的?):
在 C 中:GetB().GetA().DoSomething()
C 的 DoSomething() 调用 B 的 DoSomething(),后者调用 A 的 DoSomething。
第一个对我来说看起来更好,但在 C 的实现中我只包含 B 的 header,其中 A 仅向前声明 。所以我不能使用 A 的方法 除非在 C 中明确包含它。(这是一种不好的做法,还是我应该只包含它?)
第二个开销很大。如果我想使用 A 的 XY 方法,我必须在 B 中创建一个调用 A 的 XY 的 XY 方法,并且我必须在 C 中创建一个调用 B 的 XY 的 XY 方法。
所以我不知道我应该如何从较低的元素到达层次结构中的较高元素。
最好的解决方案是什么?
In C: GetB().GetA().DoSomething()
C's DoSomething() calls B's DoSomething() which calls A's DoSomething.
我认为两者都是错误的,因为从架构的角度来看,这种方法在 类 之间创建了强耦合。考虑使用事件调度程序,它为您的逻辑实现 Observer 模式。让组件相互发送事件并对其作出反应。
我不确定这在您的情况下如何在性能方面发挥作用,但我强烈建议您不要 premature optimization,除非它很明显。