对于我的GUI API,它适用于各种后端(sdl,gl,d3d等),我想动态地将泛型类型图像转换为它可能发生的任何形式。
所以最重要的是,我每秒钟会进行大约20 * 60fps的动态演员表。
动态演员有多贵?我是否会注意到它对性能有明显的负面影响?我还有哪些替代品可以保持可接受的性能水平?
答案 0 :(得分:18)
每秒1200 dynamic_cast
s不太可能是主要的性能问题。在找到实际类型之前,您是为每个图像执行一个dynamic_cast
还是整个if
语句序列?
如果您担心性能,实现多态的最快方法是:
在您的情况下,访客模式可能是最佳选择。它是两个虚拟调用而不是一个,但允许您将算法实现与图像数据结构分开。
答案 1 :(得分:0)
你不能使用#define定义你自己的强制转换,它在debug build中使用dynamic_cast(所以你知道你的强制转换是正确的)并在发布版本中进行简单的(MySubclass *)强制转换,所以没有性能成本吗?
答案 2 :(得分:0)
在这种特殊情况下,您应该能够组织代码,以便只需要一次dynamic_cast。我想,后端不会动态变化。