その関数内の構造体に関数参照を渡す

いくつかのトリッキーなコードを持って、断片にこだわっています。

私は、仮想基本クラスの子孫である関数を持っています。

その関数の中にはファンクタがあります。ファンクタは、この関数およびその親クラスの内部のすべてのオブジェクトにアクセスできる必要があります。しかし、 "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 {

        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) );

}
0
あなたが得たエラーは何ですか?
追加された 著者 crazyjul,

1 答え

ここでの主な問題は、時期尚早な最適化です。

Technically, replace the current …

int functionA(int a, int b){

with …

int myClassB::functionA(int a, int b){

少なくとも this の問題はなくなるはずです。

Then, not that placing a reference as a data member, like your …

myClassA& myClassA;

makes instances non-assignable. And a functor object “should” be assignable. So if you decide to go on with this, perhaps better replace that with …

myClassA* pMyClassA_;

それに応じて初期化を変更します。

Cheers & hth.,

1
追加された
残念なことに、私は昨夜の午前3時に私の郵便でタイプミスをしました。実際のコードは、myClassB :: functionA(int a、int b)を持つ
追加された 著者 Noah,