- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用 GNU Scientific Library并且需要将 std::function
转换为 gsl_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;
}
...
};
,它把错误还给了我
type name requires a specifier or qualifier
最佳答案
std::function
是一种从标准库中删除“general functor”的类型。它不能隐式转换为常规函数指针,您也不应该尝试这样做,因为您最终只会搬起石头砸自己的脚。您需要使用符合 gsl_function::function
typedef 的适当常规函数来包装对 func
的调用。
gsl_function::function
接受一个 void*
作为额外的函数参数。这是将 std::function
之类的对象传递给它的 Hook ,以方便调用。您可以使用无捕获的 lambda(它将隐式转换为自由函数指针)以保持本地化:
gsl_function F = {
[](double d, void* vf) -> double {
auto& f = *static_cast<std::function<double(double)>*>(vf);
return f(d);
},
&func
};
关于C++:将 std::function 转换为 gsl_function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606711/
这个问题建立在 here 的基础上 我有以下 cython 代码,它导入一个文件 (cGslInteg.pxd),其中包含 gsl/gsl_integration.h 和 相关部分的 cython 声
我目前正在尝试使用 .cpp 文件通过 RcppGSL 使用 GSL 库中的 gsl_function,并使用 sourceCpp() 调用它。这个想法是用同样来自 GSL 的 gsl_integra
我正在从 C 切换到 C++,我想以最佳方式使用可用的附加功能,并避免像 void * 这样被认为是“C 风格”的东西指针。具体来说,我正在尝试制作 gsl_function -like 接口(int
我想使用 GNU Scientific Library并且需要将 std::function 转换为 gsl_function ,其类型为 double (* function) (double x,
我是一名优秀的程序员,十分优秀!