C++ 将成员函数指针传递给内部类
C++ Pass member function pointer to inner-class
使用代理类实现运算符[][]。 适用于可以通过某种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
是否足够快?
像这样解决:
double operator[](int j)
{
auto dataFunc = std::bind(data, lp, _1, _2);
return dataFunc(i, j);
}
或原件不带&
:
double operator[](int j) { return (lp.*data)(i, j); }
相关文章:
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从内部类继承
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- C++ 如何在外部类中声明的内部类中使用变量
- 在C++中将内部类实现为具有名称空间的独立类有什么好处
- 参数化类的别名(或类型定义)内部类
- 从内部类的析构函数调用虚拟函数
- C++ 将成员函数指针传递给内部类
- 如何将模板指针传递给内部类
- 当向量位于内部类中时,如何删除指向对象的向量指针
- 将此指针作为weak_ptr传递给内部类
- c++中指向自身内部类的指针
- 返回指向受保护的内部类元素的指针
- 内部类——c++,内部类,以及为什么你只能创建成员作为指向它们的指针