转发用户指定的功能

时间:2015-05-18 18:49:40

标签: c++ function inlining

我目前正在编写模拟软件。我有一个相对复杂的运算符来计算,有几个参数。其中一个参数可以是用户指定的非线性函数。类似的东西:

double op(double param1, double param2, ..., function<double(double)> fct){
   ...
}

由于函数将被多次调用,我想让编译器内联函数。幸运的是,调用op时可以对该函数进行硬编码。我将总是有类似op(1.0, 2.0, ..., nonlinear1)的东西,其中nonlinear1是函数的名称,而不是变量或其他东西。

我在考虑两个想法:

  1. 功能指针double (*)(double):无法工作。
  2. 模板参数:
  3. 如下:

    template <function<double(double)> FCT> 
    double op(double param1, double param2, ...){
       ...
       double a = FCT(param2);
       ...
    }
    

    这似乎乍一看,但是编译器实际上是否知道FCT对象背后的函数,或者只是看到函数指针和返回/参数规范?

    我怎样才能实现我的目标?

1 个答案:

答案 0 :(得分:0)

您可以使用普通的模板参数,例如:

template <typename FUNCTOR>
double op(double param1, double param2, ..., FUNCTOR fct){
   ...
}