いくつかのトリッキーなコードがあり、ピースに行き詰まっています。
仮想基本クラスから派生した関数があります。
その関数の中にファンクターがあります。ファンクターは、この関数とその親クラス内のすべてのオブジェクトにアクセスできる必要があります。しかし、「this」または関数名への参照を渡すと、エラーが発生します。
この複雑さの理由は、コードを高速化するためです。私がコーディングしているアルゴリズムには、実際には高価な部分が 1 つしかありません。私の意図は、その部分を並列化することです。ただし、そのステップは、いくつかのステップを介して、 2 つの値を同時に累積します。そのため、いくつかの演算子をオーバーライドする必要があります。ファンクターは、これを実装する最も簡単な方法のように思えました。
誰でもこれを解決する方法を提案できますか?
以下代表コード:
myClassA Glm{
public:
virtual int functionA(int a, int b)=0;
}
class myClassB : public myClassA {
public:
virtual int functionA(int a, int b);
}
int functionA(int a, int b){
// do some stuff
struct MyFunctor : public binary_function<Fraction, DoubleIterator, Fraction> {
MyFunctor(myClassA& in_class, int A) : myClassA(in_class), column(iColumn) {
}
myClassA& myClassA;
int A;
Fraction operator()(double B, int A, ) {
double C = doFancyStuff(A,B);
return C;
}
}
//use stl to accumulate
accumulate(data.begin(), data.end(), temp, MyFunctor(*this, column) );
}