2011-10-28 262 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