簡體   English   中英

如何從另一個方法調用方法的指針

[英]How to call a pointer to method from another method

前段時間我遇到了這個問題,我放棄了,但是最近又回來了。

#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 但這似乎並不能完全解決我的問題。

實際上,這兩個問題只有一個區別-函數的調用點。

謝謝你的時間

“ 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))();
}

#萬一

然后用類似這樣的名稱來調用它:

myElement.myNode.otherMethod( &myElement );

您可以做一些改善的事情,但這應該可以幫助您入門。

如果希望調用一個指向element2D成員的指針,則需要一個指向element2D對象的指針。 考慮使用Boost.Function或Boost.Signals2獲得所需的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM