我目前正在用 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 中为每个约束进行函数调用。
我想到了两种解决方案:
- 为约束编写一个通用类。使用算法中计算步骤 3 和 5 的方法为我需要的每个约束派生类。
- 编写一个通用仿函数(只有 () 运算符的类)并从中派生出用于计算步骤 3 和 5 的仿函数。这个想法的原因是仿函数中对 () 运算符的调用是内联的(关于可重用代码的答案在这个链接)。
第一个问题:
有什么办法可以减少函数调用的开销?
第二个问题:
有没有办法让编译器总是内联上述两种解决方案中的函数?从这个问题我知道从指向对象的指针调用的虚函数不能被内联。
第三个问题:
有没有比我提出的解决方案更有效的方法?