我目前正在编写一个模拟软件。我有一个相对复杂的算子要计算,有几个参数。其中一个参数可以是用户指定的非线性函数。就像是:
double op(double param1, double param2, ..., function<double(double)> fct){
...
}
由于该函数将被多次调用,因此我想使编译器能够内联该函数。幸运的是,该函数可以在调用时进行硬编码op
。Sou 我总是会有类似函数名称op(1.0, 2.0, ..., nonlinear1)
在哪里nonlinear1
而不是变量或其他东西的东西。
我在想两个想法:
- 函数指针
double (*)(double)
:不起作用。 - 模板参数:
如下:
template <function<double(double)> FCT>
double op(double param1, double param2, ...){
...
double a = FCT(param2);
...
}
乍一看这似乎可行,但编译器是否真的知道 FCT 对象背后的函数,还是只看到函数指针和返回/参数规范?
我还能如何实现我想要的?