避免动态强制转换的体系结构策略

Architectural strategies for avoiding dynamic casts

本文关键字:体系结构 策略 转换 动态      更新时间:2023-10-16

人们经常会读到,如何设计代码以避免进行强制转换是值得的,以及发现自己需要强制转换可能意味着有更好的实现可用。我正试图在虚拟世界引擎的实现中实现"免费代码"这一圣杯,在虚拟世界中,许多对象都有各种各样的接口,充当许多不同形式的中介和数据(有时两者兼而有之)。正如类似问题中的一个答案所提到的(链接),其目的是始终在所需位置拥有正确类型的引用/指针,而不是试图从大量候选对象中挖掘出一个。

我最近尝试管理这个大问题涉及到用对象的中介注册对象,这在控制粒度方面有一些很好的优势(您可以在运行时配置中介和它们的目标之间的多对多映射)。

还有一些问题。。。我目前关注的最大问题是取消调解员的目标注册。为了跟踪谁在使用什么,而不必轮询每一个可能的中介,该程序需要存储更多关于创建了什么链接的数据。一方面,中介可以简单地通过检查其目标是否已过期来断开连接(我对所有内容都使用智能指针和弱指针,所以这并不困难),但这只是处理对象的过期,并没有建立一个有意义的行为重新配置框架。

从远处看,这只是软件在时间和内存之间进行权衡的又一个例子。存储更多的数据以进行更少的计算。

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

这是一个有根本缺陷的命题。CCD_ 1的存在是有原因的。尝试以无强制转换代码为目标是幼稚的——强制转换是有目的的。当然,尽可能减少它们可能是最好的做法,但这与禁止它们大不相同。没有dynamic_cast的代码不是某种圣杯——要么它不需要它,在这种情况下它只是代码,要么它确实需要它,这种情况下是次优代码。

然而,为了更深入地讨论这个话题,我个人发现,如果不像瘟疫一样传播遗产,我正试图制造启示录,那么对选角的需求是有限的——模板在这里是一个奇迹。