我目前正在用c ++编写Maya 2013插件,该插件针对特定约束优化给定网格的几何。我需要达到最佳性能。目前我只针对特定约束实现了算法的硬编码版本并且速度非常快,但我需要为任何给定的约束实现算法的通用实现的一些优势(因此我需要某种多态性)。
算法的一般结构的伪代码是:
(1) do k times:
(2) for every face fj in the mesh do:
(3) some manipulation on the vertices qi incident to the face fj
(4) for every vertex vi in the mesh do:
(5) some manipulation on the faces fj incident to the vertex vi
问题在于,在我的具体实现中,伪代码中没有函数调用步骤3和5中的计算,当我尝试使用辅助函数计算这些步骤时,性能大大降低。
对于通用实现,我需要在步骤3和5中为每个约束进行函数调用。
我想到了两种解决方案:第一个问题:
有没有办法减少函数调用的开销?
第二个问题:
有没有办法让编译器始终内联函数 以上两种解决方案?从这answer about reusable code in this link我知道虚拟 从指针到对象调用的函数不能内联。
第三个问题:
有没有比我提出的解决方案更有效的方法?
答案 0 :(得分:1)
我建议您查看模板并传递模板函数/仿函数作为参数 使用动态多态性,您几乎总是间接调用函数,即编译器不知道函数体 - 因此优化选项是有限的。 模板允许您执行所谓的静态多态性。
请参阅以下链接以获取更多信息: