【问题标题】:Inlinging of a user-specified function用户指定函数的内联
【发布时间】:2015-05-18 18:49:40
【问题描述】:

我目前正在编写一个模拟软件。我有一个相对复杂的算子要计算,有几个参数。其中一个参数可以是用户指定的非线性函数。比如:

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

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

我在想两个想法:

  1. 函数指针double (*)(double):不起作用。
  2. 模板参数:

如下:

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

乍一看似乎可行,但编译器是否真的知道 FCT 对象背后的函数,还是只看到函数指针和返回/参数规范?

我还能如何实现我想要的?

【问题讨论】:

标签: c++ function inlining


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多