指向成员函数的指针提供了一种存储和执行特定成员函数的便捷方法,同时提供动态绑定的灵活性。但是,调用这些函数指针有其独特的语法。
对于非静态成员函数,调用函数指针需要提供命名参数和 this 指针,该指针表示其上的对象该函数将被调用。以下更正后的代码演示了正确的语法:
typedef void (Box::*HitTest)(int x, int y, int w, int h); for (std::list::<HitTest>::const_iterator i = hitTestList.begin(); i != hitTestList.end(); ++i) { HitTest h = *i; (box->*h)(xPos, yPos, width, height); }
此处,box 是指向 Box 对象的指针,该对象将充当 this 指针。通过使用 box->*h,我们实质上是在 box 指向的特定 Box 实例上调用成员函数 h。
关于将成员函数添加到列表,更正的代码将是:
std::list<HitTest> list; for (std::list<Box*>::const_iterator i = boxList.begin(); i != boxList.end(); ++i) { Box* box = *i; list.push_back(&Box::HitTest); }
以上是如何正确调用C中成员函数的指针?的详细内容。更多信息请关注PHP中文网其他相关文章!