gpt4 book ai didi

c++ - 如何有效地从对象访问父对象的父对象?

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:05 25 4
gpt4 key购买 nike

抱歉定义错误的标题。我的意思是:

(顺便说一句,我正在开发游戏引擎,A 是场景,B 是游戏对象,C 是组件 )

我有 3 个类:A、B、C

  • A包含B,B包含C。
  • A 和 B 相互引用。
  • B 和 C 相互引用。

(A在B的header中前向声明,并包含在B的实现中)

是这样的:A <-> B <-> C

我的情况是这样的:

  • 我想从 C 使用 A 的方法。(比如告诉主容器添加另一个 B 等)

  • ~我想制作一个可重用的函数,它调用父对象的父对象的方法。

  • 例如,在 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'sDoSomething() which calls A's DoSomething.

我认为两者都是错误的,因为从架构的角度来看,这种方法会在类之间产生强耦合。考虑使用实现 Observer 的事件调度程序你的逻辑模式。让组件相互发送事件并对其作出 react 。

我不确定这在您的情况下如何在性能方面发挥作用,但我强烈建议不要 premature optimization除非很明显。

关于c++ - 如何有效地从对象访问父对象的父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com