使用代理类实现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
与指向成员函数调用的指针相比是否足够快?
答案 0 :(得分:0)
像这样解决:
&
或没有double operator[](int j) { return (lp.*data)(i, j); }
的原始文件:
{{1}}