【问题标题】: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。 但这似乎不是我问题的完整答案。

其实这两个问题只有一个区别——函数调用的点。

感谢您的宝贵时间

【问题讨论】:

    标签: c++ function-pointers member-function-pointers


    【解决方案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 用于您想要的功能。

      【讨论】:

        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-16
        相关资源
        最近更新 更多