避免动态强制转换的体系结构策略
Architectural strategies for avoiding dynamic casts
人们经常会读到,如何设计代码以避免进行强制转换是值得的,以及发现自己需要强制转换可能意味着有更好的实现可用。我正试图在虚拟世界引擎的实现中实现"免费代码"这一圣杯,在虚拟世界中,许多对象都有各种各样的接口,充当许多不同形式的中介和数据(有时两者兼而有之)。正如类似问题中的一个答案所提到的(链接),其目的是始终在所需位置拥有正确类型的引用/指针,而不是试图从大量候选对象中挖掘出一个。
我最近尝试管理这个大问题涉及到用对象的中介注册对象,这在控制粒度方面有一些很好的优势(您可以在运行时配置中介和它们的目标之间的多对多映射)。
还有一些问题。。。我目前关注的最大问题是取消调解员的目标注册。为了跟踪谁在使用什么,而不必轮询每一个可能的中介,该程序需要存储更多关于创建了什么链接的数据。一方面,中介可以简单地通过检查其目标是否已过期来断开连接(我对所有内容都使用智能指针和弱指针,所以这并不困难),但这只是处理对象的过期,并没有建立一个有意义的行为重新配置框架。
从远处看,这只是软件在时间和内存之间进行权衡的又一个例子。存储更多的数据以进行更少的计算。
我想问你对构建程序以避免动态演员阵容有什么想法,以及你是否可以分享在这些情况下有效的策略/模式。
这是一个有根本缺陷的命题。CCD_ 1的存在是有原因的。尝试以无强制转换代码为目标是幼稚的——强制转换是有目的的。当然,尽可能减少它们可能是最好的做法,但这与禁止它们大不相同。没有dynamic_cast
的代码不是某种圣杯——要么它不需要它,在这种情况下它只是代码,要么它确实需要它,这种情况下是次优代码。
然而,为了更深入地讨论这个话题,我个人发现,如果不像瘟疫一样传播遗产,我正试图制造启示录,那么对选角的需求是有限的——模板在这里是一个奇迹。
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 以编程方式在运行时检测 CPU 体系结构
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- 了解类型特征的体系结构
- Apple Mach-O-Linker 错误:在体系结构 x86-64 中找不到从(行)引用的变量
- 避免动态强制转换的体系结构策略