1

関数ポインタを含むベクトルがあります:

vector<double (*)(vector<double>)> dY = {d2x,d2y,dx,dy}

別の関数では、このベクトルを反復するforループがあります。

for( vector<double>::const_iterator it = dY.begin(); it != dY.end(); ++it){
    vector<double> Y = {0,10,0,10};
    ...
}

ここで、d2x(Y)、d2y(Y)、dx(Y)、およびdy(Y)を計算したいのですが、引数を指定できるように、イテレーターを正しくキャストできません。

これどうやってするの?

どうもありがとう

4

2 に答える 2

5

あなたは本当に正しいベクトルを繰り返しますか?ループ内のタイプはベクトルitに適合しません。dY

for( vector<double (*)(vector<double>)>::const_iterator it = dY.begin(); it != dY.end(); ++it)
//          ^^^^^^^^^^^^^^^^^^^^^^^^^ -- You need the correct type here

正しいイテレータがあれば、これは機能するはずです。

double result = (*it)(Y);
于 2013-01-15T16:30:05.427 に答える
2

キャストは必要ありません。イテレータを逆参照して関数ポインタを取得するだけです。

double d = (*it)(Y);

ただし、間違ったイテレータタイプを宣言しました。そのはず

vector<double (*)(vector<double>)>::const_iterator

C ++ 11を使用しているので、必要にauto応じて短縮できます。

于 2013-01-15T16:34:07.353 に答える