C++中的动态转换有多贵?

jma*_*erx 26 c++ dynamic-cast

对于我的GUI API,它适用于各种后端(sdl,gl,d3d等),我想动态地将泛型类型图像转换为它可能发生的任何形式.

所以最重要的是,我将每秒做大约20*60fps的动态演员表.

动态演员有多贵?我是否会注意到它对性能有明显的负面影响?我还有哪些替代品可以保持可接受的性能水平?

Ben*_*igt 18

dynamic_cast每秒1200 秒不太可能成为主要的性能问题.在找到实际类型之前,您是在dynamic_cast为每个图像执行一个还是整个if语句序列?

如果您担心性能,实现多态的最快方法是:

  • --- 最快 ---
  • 函数重载(仅限编译时多态)
  • CRTP(仅限编译时多态)
  • 标签,开关和静态强制转换(脆弱,不支持多级继承,维护头痛因此不建议用于不稳定的代码)
  • 虚拟功能
  • 访客模式(倒虚功能)
  • --- 几乎一样快 ---

在您的情况下,访客模式可能是最佳选择.它是两个虚拟调用而不是一个,但允许您将算法实现与图像数据结构分开.