gpt4 book ai didi

c++ - 避免动态转换的架构策略

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:34 25 4
gpt4 key购买 nike

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

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

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

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

我想问一下您对构建程序以避免动态转换有何看法,以及您是否可以分享在这些情况下有效的任何策略/模式。

最佳答案

这是一个根本上有缺陷的命题。 dynamic_cast 的存在是有原因的。试图以无强制转换代码为目标只是天真——强制转换是有目的的。当然,尽可能减少它们可能是最好的办法,但这与试图禁止它们有很大不同。没有 dynamic_cast 的代码不是某种 chalice - 它不需要它,在这种情况下它只是代码,或者它确实需要它,在这种情况下它是次优代码。

然而,为了更切题一点,我个人发现只要不像瘟疫那样四处传播继承,而我正试图引发世界末日,那么对转换的需求是有限的——模板是一个奇迹在这里。

关于c++ - 避免动态转换的架构策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6285315/

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