我在BOOST中使用了一些数值集成包(参见下面的代码)。 任何人都可以解释:
的含义double operator()(double x) {return x/std::log(x);}
这是什么“operator()(double x)”??
quadrature::adaptive()(f(), 0., 1., answer, error_estimate);
这里的“f()”是什么?
#include <boost/numeric/quadrature/adaptive.hpp>
#include <boost/numeric/quadrature/kronrodgauss.hpp>
#include <iostream>
#include <cmath>
namespace quadrature=boost::numeric::quadrature;
struct f
{
double operator()(double x) const { return x/std::log(x); }
};
int main()
{
double answer, error_estimate;
// integrate x/log(x) on [0,1]
quadrature::adaptive()(f(), 0., 1., answer, error_estimate);
std::cout << "integtral(x/log(x)) on [0,1] is " << answer
<< " with error estimate " << error_estimate
<< std::endl;
return EXIT_SUCCESS;
}
答案 0 :(得分:2)
f
是一个仿函数,即定义operator()
的类(在本例中为结构)。这意味着可以使用此类的实例,就好像它们是函数一样:
f myinstance;
myinstance(2.3);
operator()
定义f
实例在用作函数时的签名和行为,即它提供了在myinstance
应用于参数时执行的实际函数的定义。 / p>
f()
表示:使用默认构造函数创建f
的匿名实例。即它在上面的示例中与f myinstance
类似,只是创建的实例没有名称。
如您所见,f
的实例作为参数传递给adaptive
调用。在内部,此实例随后作为函数应用于各种对象。换句话说,整个机制使您能够定义一个函数(以f
之类的仿函数的形式)并将其作为参数传递。
答案 1 :(得分:1)
operator()
是C ++函数调用运算符。它意味着您可以将参数括号应用于类的对象,然后调用该运算符。
关于f()
,可能是您在下面显示的struct f
的实例化。
你需要一个c ++教科书