C++ C++;:将std::函数转换为gsl_函数
我想使用,需要将C++ C++;:将std::函数转换为gsl_函数,c++,c++11,casting,gsl,C++,C++11,Casting,Gsl,我想使用,需要将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_ca
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;
}
...
};
类数值{
公众:
....
双积分(函数和函数){
双重结果,错误;
gsl_函数F;
F.函数=static_cast(func);
gsl_积分_qag(&F,0,1,epsabs_,epsrel_,1000,6,w_,&result,&error);
返回结果;
}
...
};
,这就把错误还给了我
类型名称需要说明符
或限定词
std::function
是一种从标准库中删除“通用函子”持有者的类型。它不能隐式地转换为常规函数指针,您也不应该尝试这样做,因为您最终会自食其果。您需要使用符合gsl_function::function
typedef的适当常规函数包装对func
的调用
gsl\u 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
};
gsl_函数F={
[](双d,无效*vf)->双d{
自动&f=*静态(vf);
返回f(d);
},
&func
};
您不能将静态\u转换为std::function
函数指针std::function
可能包含比简单函数指针更多的信息。不能将std::function
转换为函数指针。请看问题。可能与我要找的完全相同!非常详细的文字选择Thx!