避免动态演员表的建筑策略

时间:2011-06-08 21:10:10

标签: c++ design-patterns architecture casting

人们经常会读到如何设计代码以避免需要进行强制转换,以及如何发现自己需要强制转换可能会表明有更好的实现可用。我正在尝试在虚拟世界引擎的实现中实现“无铸造代码”的圣杯,其中许多对象具有各种各样的接口,充当许多不同形式的调解器和数据(有时两者) 。正如在类似问题中提到的一个答案(Linkage),目的是始终在所需位置具有正确类型的引用/指针,而不是试图从大范围的候选对象中挖掘出一个。 / p>

我对管理这个大问题的最新尝试涉及使用调解器注册对象,这在控制粒度方面具有一些很好的优势(您可以运行时在调解器及其目标之间配置多对多的映射)。

还有一些问题......我现在看到的最大问题是调解员的目标撤销。为了跟踪谁在使用什么而不必轮询每个可能的中介,程序需要存储更多关于已创建链接的数据。一方面,调解员可以通过检查他们的目标是否已过期来断开连接(我使用智能指针和弱指针,因此这并不困难),但这只是处理对象的到期,并且没有建立有意义的行为重新配置的框架。

从远处看,这只是软件在时间和记忆之间进行权衡的另一种情况。存储更多数据以减少计算量。

我想问一下你对构建程序的想法是什么,以避免动态演员表,以及你是否可以分享在这些情况下有效的任何策略/模式。

1 个答案:

答案 0 :(得分:3)

这是一个根本上有缺陷的主张。 dynamic_cast存在是有原因的。试图瞄准无铸造代码只是天真的演员才有目的。当然,尽可能减少它们可能是最好的方法,但这与试图禁止它们有很大不同。没有dynamic_cast的代码不是某种圣杯 - 要么它不需要它,在这种情况下它只是代码,或者它确实需要它,在这种情况下它是次优代码。

然而,为了保持更多关于主题的话,我个人发现,仅仅是因为没有传播继承,就像它是瘟疫而我试图引起天启,那么对铸造的需求是有限的 - 模板是一个奇迹这里。