在没有模板的情况下评估另一个类的动态函数指针

时间:2013-08-30 16:22:58

标签: c++ function-pointers templating dynamic-function

我有一个自动插入2D功能的类(非常满意)。它接受一个指向被插值方法的动态函数指针。我不得不模板化类,因为我需要对象实例以及指针。

我可以避免模板化课吗?或者我是否需要继续这样做才能接受对象实例作为参数?基类可能吗? (我对c ++很新)

我的方式是(缩写):

template<class F>
class Interpolate {
   Interpolate(double (F::*f)(double, double), F & obj, ...) { 
      ...
      double value = (object.*f)(x,y);
      ...
   }
}

1 个答案:

答案 0 :(得分:1)

正如评论中指出的,你也可以使用std :: function。这为std :: bind提供了更大的灵活性。另一方面,std :: function可能会在堆上分配结果函数,这会导致很大的开销(可以通过使用std :: cref()来避免)。关于std :: function vs templates的执行时间差异的一个非常有趣的讨论可以在std::function vs template找到。

“请注意,std :: function能够存储不同类型的可调用对象。因此,它必须为存储执行一些类型擦除魔法。通常,这意味着动态内存分配(默认情况下通过调用new众所周知,这是一个非常昂贵的操作。“通过Cassio Neri - 这里是std :: cref可以提供帮助的地方,特别是因为在我刚写的链接中讨论的例子中,没有std :: cref,堆分配std :: function的速度减慢了10倍!