如何从另一个方法调用指向方法的指针
Posted
技术标签:
【中文标题】如何从另一个方法调用指向方法的指针【英文标题】:How to call a pointer to method from another method 【发布时间】:2010-03-03 23:35:57 【问题描述】:我前段时间遇到过这个问题,我放弃了,但最近又回来了。
#include <iostream>
class element2D;
class node2D
public:
void (element2D::*FunctionPtr)();
void otherMethod()
std::cout << "hello" << std::endl;
((this)->*(this->FunctionPtr))(); //ERROR<-------------------
;
class element2D
public:
node2D myNode;
void doSomething() std::cout << "do something" << std::endl;
;
int main()
element2D myElement;
myElement.myNode.FunctionPtr = &element2D::doSomething; //OK
((myElement).*(myElement.myNode.FunctionPtr))(); //OK
return 0;
我在标记线上遇到错误:
pointer to member type 'void (element2D::)()' incompatible with object type 'node2D'
非常感谢您的帮助。今天有一个类似的问题部分帮助了我:link。 但这似乎不是我问题的完整答案。
其实这两个问题只有一个区别——函数调用的点。
感谢您的宝贵时间
【问题讨论】:
【参考方案1】:"this" 是指向 node2D 的指针,但 FunctionPtr 指向 element2D 的成员——这就是错误。
#if 0 // 损坏的版本
void otherMethod()
std::cout << "hello" << std::endl;
((this)->*(this->FunctionPtr))(); //ERROR<-------------------
#else // 固定版本
void otherMethod( element2D * that )
std::cout << "hello" << std::endl;
((that)->*(this->FunctionPtr))();
#endif
然后你用类似这样的方式调用它:
myElement.myNode.otherMethod( &myElement );
您可以采取一些措施来改进这一点,但这应该可以帮助您开始。
【讨论】:
【参考方案2】:如果你想调用一个指向 element2D 成员的指针,你需要一个指向 element2D 对象的指针。考虑将 Boost.Function 或 Boost.Signals2 用于您想要的功能。
【讨论】:
以上是关于如何从另一个方法调用指向方法的指针的主要内容,如果未能解决你的问题,请参考以下文章