我想使用GNU Scientific Library并需要将std::function
投射到double (* function) (double x, void * params)
类型class Numerics {
public:
....
double integrate(function<double(double)> &func) {
double result, error;
gsl_function F;
F.function = static_cast<(*)(double, void *)>( func );
gsl_integration_qag(&F, 0, 1, epsabs_, epsrel_, 1000, 6, w_, &result, &error);
return result;
}
...
};
。
到目前为止,我只是尝试过:
import jira.client
from jira.client import JIRA
,它将错误交给我
类型名称需要说明符 或限定词
答案 0 :(得分:4)
std::function
是一种从标准库中删除“普通仿函数”的类型。它不是可以隐式转换为常规函数指针,也不应该尝试这样做,因为你最终只能用脚射击自己。您需要使用符合func
typedef的正确常规函数将调用包装到gsl_function::function
。
gsl_function::function
接受void*
作为额外函数参数。这是将std::function
这样的对象传递给它的钩子,以方便调用。你可以使用一个无捕获的lambda(它将隐式转换为一个自由函数指针),以保持本地的东西:
gsl_function F = {
[](double d, void* vf) -> double {
auto& f = *static_cast<std::function<double(double)>*>(vf);
return f(d);
},
&func
};