【问题标题】:Pass a function reference to a struct inside that function将函数引用传递给该函数内的结构
【发布时间】:2011-10-28 10:02:55
【问题描述】:

有一些棘手的代码,卡在一块。

我有一个继承自虚拟基类的函数。

该函数内部是一个仿函数。仿函数需要能够访问此函数及其父类中的所有对象。但是,当传递对“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) );

}

【问题讨论】:

    标签: c++ stl functor accumulate


    【解决方案1】:

    这里的主要问题是过早的优化。

    从技术上讲,替换当前的……

    int functionA(int a, int b){
    

    与……

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

    至少你与this 的问题应该消失了。

    然后,不是将引用作为数据成员,就像你的……

    myClassA& myClassA;
    

    使实例不可分配。一个仿函数对象“应该”是可赋值的。因此,如果您决定继续这样做,最好将其替换为……

    myClassA* pMyClassA_;
    

    并相应地更改初始化。

    干杯,

    【讨论】:

    • 不幸的是,我昨晚凌晨 3 点在帖子中打错了字。真正的代码确实有 myClassB::functionA(int a, int b)
    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 2012-05-09
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多