在c ++中使用多态和functor实现快速性能

时间:2013-08-29 02:58:43

标签: c++ performance polymorphism functor

我目前正在用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中为每个约束进行函数调用。

我想到了两种解决方案:

  1. 为约束编写泛型类。使用计算算法中步骤3和5的方法,为我需要的每个约束导出类。
  2. 编写一个通用仿函数(只有()运算符的类)并从中派生出仿函数来计算步骤3和5.这个想法的原因是在函数中对()运算符的调用是内联的({{ 3}})。
  3. 第一个问题

      

    有没有办法减少函数调用的开销?

    第二个问题

      

    有没有办法让编译器始终内联函数   以上两种解决方案?从这answer about reusable code in this link我知道虚拟   从指针到对象调用的函数不能内联。

    第三个问题

      

    有没有比我提出的解决方案更有效的方法?

1 个答案:

答案 0 :(得分:1)

我建议您查看模板并传递模板函数/仿函数作为参数 使用动态多态性,您几乎总是间接调用函数,即编译器不知道函数体 - 因此优化选项是有限的。 模板允许您执行所谓的静态多态性。

请参阅以下链接以获取更多信息:

Static polymorphism definition and implementation

C++ templates for performance?