C ++传递成员函数指向内部类的指针

时间:2017-05-12 00:09:11

标签: c++ c++11

使用代理类实现operator [] []。适用于单个二维数据结构,可以通过某种double data(int row, in col)方法访问。但是,如果我想要几个data方法,我想使用指向成员函数的指针,该函数存储在代理内部类TPatternRow中:

class TLearnPattern
{
public:
    typedef int (TLearnPattern::* IndexFunction)(int);
    typedef double (TLearnPattern::* DataFunction)(int, int);

    TLearnPattern(TDataSource *source);

    class TPatternRow  ///< Proxy class to implement operator[][]
    {
    public:
        TPatternRow(TLearnPattern& source, int row, DataFunction func) :
            lp(source),
            i(row),
            data(func)
        {}
        double& operator[](int j)       { return (lp.*data)(i, j); }

    private:
        TLearnPattern& lp;
        DataFunction data = &TLearnPattern::in;
        int i;
    };

    TPatternRow operator [](int i) { return TPatternRow(*this, i, &TLearnPattern::in); }
    TPatternRow In(int i)  { return TPatternRow(*this, i, &TLearnPattern::in); }
    TPatternRow Out(int i) { return TPatternRow(*this, i, &TLearnPattern::out); }

    virtual double in(int row, int col) final;
    virtual double out(int row, int col) final;
}

如何在语法上正确地调用以下行?

double& operator[](int j) { return (lp.*data)(i, j); }

使用std :: bind?如何在TPatternRow构造函数中正确绑定它?

还有一些相关问题:bind与指向成员函数调用的指针相比是否足够快?

1 个答案:

答案 0 :(得分:0)

像这样解决:

&

或没有double operator[](int j) { return (lp.*data)(i, j); } 的原始文件:

{{1}}