我正在使用gsl来集成一个函数。该函数构建在一个lambda函数中,该函数具有double和void *作为输入,并且输出double。 现在,如果我使用没有任何变量捕获的lambda表达式,一切正常。但是如果我进行可变捕获,它就不再工作了。lambda函数与gsl的数值积分
任何人都可以解释我为什么这样吗?
这里有两个代码片段是我做了解释我的问题:
这一个正常工作:
int main(int argc, char **argv)
{
double beg = 0;
double end = 10;
auto f = [] (double x, void * p) {return 2.0;};
gsl_integration_workspace * w = gsl_integration_workspace_alloc (GSL_INTEGRATION_WORKSPACE_SIZE);
double result;
double error;
gsl_function F;
F.function = f;
F.params = NULL;
gsl_integration_qags (&F, beg, end, 0, GSL_INTEGRATION_RELATIVE_PRECISION, GSL_INTEGRATION_WORKSPACE_SIZE, w, &result, &error);
cout<<result<<endl;
}
虽然这一个
int main(int argc, char **argv)
{
double beg = 0;
double end = 10;
double p = 2.0;
auto f = [&] (double x, void * p) {return p;};
gsl_integration_workspace * w = gsl_integration_workspace_alloc (GSL_INTEGRATION_WORKSPACE_SIZE);
double result;
double error;
gsl_function F;
F.function = f;
F.params = NULL;
gsl_integration_qags (&F, beg, end, 0, GSL_INTEGRATION_RELATIVE_PRECISION, GSL_INTEGRATION_WORKSPACE_SIZE, w, &result, &error);
cout<<result<<endl;
}
上线
产量F.function = f;
出现以下错误:
Assigning to 'double (*)(double, void *)' from incompatible type '<lambda at /[omissis]/main.cpp>'
这正是我一直在寻找的! – 2014-10-30 07:51:41
如果你喜欢,你可以给其他答案:) – 2014-10-30 15:52:34
哪里是'std :: function'? – Walter 2015-09-27 17:29:17