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

时间:2011-04-17 15:07:45

标签: c++ dynamic-cast

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

所以最重要的是,我每秒钟会进行大约20 * 60fps的动态演员表。

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

3 个答案:

答案 0 :(得分:18)

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

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

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

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

答案 1 :(得分:0)

你不能使用#define定义你自己的强制转换,它在debug build中使用dynamic_cast(所以你知道你的强制转换是正确的)并在发布版本中进行简单的(MySubclass *)强制转换,所以没有性能成本吗?

答案 2 :(得分:0)

在这种特殊情况下,您应该能够组织代码,以便只需要一次dynamic_cast。我想,后端不会动态变化。