2

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;
}
4

2 に答える 2

2

fファンクター、つまり、を定義するクラス(この場合は構造体)ですoperator()。これは、このクラスのインスタンスを関数であるかのように使用できることを意味します。

f myinstance;
myinstance(2.3);

は、関数として使用されたときoperator()のインスタンスのシグネチャと動作を定義します。つまり、引数に適用さfれたときに実行される実際の関数の定義を提供します。myinstance

手段:デフォルトのコンストラクターを使用して、のf()匿名インスタンスを作成します。つまり、作成されたインスタンスに名前がないことを除いて、上記の例のように機能しますff myinstance

ご覧のとおり、のインスタンスは引数として呼び出しfに渡されます。adaptive内部的には、このインスタンスは関数としてさまざまなオブジェクトに適用されます。つまり、メカニズム全体を使用すると、関数を(のようなファンクターの形式でf)定義し、引数として渡すことができます。

于 2012-12-12T04:27:24.427 に答える
1

operator()C++ 関数呼び出し演算子です。つまり、クラスのオブジェクトに引数括弧を適用すると、その演算子が呼び出されます。

に関してはf()、おそらく、struct f以下に示す のインスタンス化です。

C++ の教科書が必要です

于 2012-12-12T04:24:14.160 に答える