如何从另一个方法调用指向方法的指针

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 用于您想要的功能。

【讨论】:

以上是关于如何从另一个方法调用指向方法的指针的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个成员函数调用成员函数指针?

如何从另一个类调用指向成员的函数? [复制]

使用具有指向派生类对象的指针的基类指针数组调用派生类方法

通过对象而不是指向它的指针调用带有指针接收器的方法?

如何使用参数从另一个方法调用方法

指向模板类成员函数的函数指针