2011-10-28 459 views
0

有一些棘手的代碼,並卡在一塊。將函數引用傳遞給該函數中的結構體

我有一個虛擬基類的後代函數。

裏面的那個函數是一個函子。仿函數需要能夠訪問這個函數及其父類中的所有對象。但是,在傳遞「this」或函數名稱的引用時,會出現錯誤。

所有這些複雜的原因是加速代碼。我編碼的算法確實只有一個昂貴的部分。我的意圖是並行化該部分。但是,該步驟通過幾個步驟同時累積超過兩個值。所以,我需要重寫一些操作符。仿函數看起來是實現這個最簡單的方法。

任何人都可以建議如何解決這個問題。

代表下面的代碼:

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

} 
+0

你得到的錯誤是什麼? – crazyjul

回答

1

主要的問題在這裏過早優化

從技術上講,取代目前的&hellip;

int functionA(int a, int b){ 

with&hellip;

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

並且至少你的問題this應該消失。

然後,不要說引用作爲數據成員,就像你的&hellip;

myClassA& myClassA; 

使實例不可分配。並且函數對象「應該」可賦值。所以如果你決定繼續這樣做,或許更好地用......來代替它。

myClassA* pMyClassA_; 

並相應地更改初始化。

乾杯& hth。,

+0

不幸的是,我昨晚3點在我的帖子中輸入了一個錯字。真正的代碼*不具有myClassB :: functionA(int a,int b) – Noah