0

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

我可以避免将课程模板化吗?还是我需要继续这样做才能接受对象实例作为参数?基类可能吗?(我对 C++ 还很陌生)

我拥有它的方式是(缩写):

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

1 回答 1

1

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

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

于 2013-08-30T16:30:52.743 回答