2013-08-21 46 views
0

所以我正在構建一個機器人代碼框架,並且遇到了一些問題需要編譯。我有一個名爲「行爲」的類,它已擴展爲創建所有行爲。我已經實現了一系列的回調函數,這些函數是所有行爲都需要的。但是,我不能使用父類函數作爲給定行爲類的子代的回調函數。 (這是C++)。我懷疑這與C++中的函數指針有關,我不明白。你們中的任何人能夠解釋如何做到這一點?訂閱一個使用父類功能作爲回調的主題

+0

似乎你在派生類中定義了行爲函數,並且子類會覆蓋它們,並且你想使用子類的函數作爲回調函數,對吧? –

+0

實際上我沒有得到的是在父類中定義的函數,它的函數指針需要在主函數中傳遞。我只有一個兒童班的實例與 – user1415372

回答

0

你在這裏方面略顯清淡,但將這樣的幫助:

class Behaviour { 
public: 
    void callback1() { 
     child_behaviour1(); 
    } 
private: 
    virtual void child_behaviour1() = 0; 
} 

,然後提供child_behaviour1()必要behaviout在你的派生類,當你使用指針Behaviour::*callback1

+0

合作雅對此感到抱歉。但事情是我寧願不要重新實現有問題的函數,因爲它對所有子類都是一樣的。 – user1415372

0
class Behavior { 
    virtual void callback_func1() {} 
} 

class RunBehavior : Behavior { 
    void callback_func1() { 
    //to run ? 
    } 
} 

//somewhere using callback_func1() 
Behavior b = new RunBehavior(); 
b.callback_func1(); 

這應該根據您的描述滿足您的需求。

0

這可以通過在C++中使用函數指針來完成。

寫入函數指針(對於在派生類的功能)在鹼使用的typedef class.Also寫函數註冊像下面派生類回調函數:

Behaviour.cpp

typedef (*CALLBCK)(in,int); 

class Behavior { 

    CALLBCK funToBeCalled; 

    void register_callback(CALLBCK funPtr) 
    { 
      funToBeCalled = funPtr ;      
    } 

} 

一旦你這樣做了,你可以使用register_callback從派生類代碼註冊派生類的回調函數。

Derived.cpp

class derived:public Behaviour{ 

inline void custom(int,int) 
{ 
    ur custom code 
} 

inline void somefun(){ 
.. 
.. 
register_callback(custom); 
.. 
} 



} 

一旦回調函數的註冊完成後,你可以使用funToBeCalled(在基地的函數指針)的基礎類調用定製派生類功能