所以我正在構建一個機器人代碼框架,並且遇到了一些問題需要編譯。我有一個名爲「行爲」的類,它已擴展爲創建所有行爲。我已經實現了一系列的回調函數,這些函數是所有行爲都需要的。但是,我不能使用父類函數作爲給定行爲類的子代的回調函數。 (這是C++)。我懷疑這與C++中的函數指針有關,我不明白。你們中的任何人能夠解釋如何做到這一點?訂閱一個使用父類功能作爲回調的主題
0
A
回答
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(在基地的函數指針)的基礎類調用定製派生類功能
相關問題
- 1. 使用node.js訂閱主題
- 2. 使用AWS Lambda功能訂閱Amazon SNS主題?
- 3. 如何使用其Ajax功能訂閱ActiveMQ主題。
- 4. 訂閱主題
- 5. Rx訂閱()回調問題
- 6. Firebase的雲端功能 - 訂閱用戶到主題
- 7. 訂閱功能
- 8. 調用返回父功能
- 9. RxJs - 從訂閱Observable調用下一個主題
- 10. 無法訂閱數據使用一個訂閱功能在離子2
- 11. 調用成功,在angular2中使用訂閱錯誤回調?
- 12. 使用terraform訂閱AmazonIpSpaceChanged的SNS主題
- 13. ROS:使用lambda作爲nodehandle中的回調。訂閱
- 14. Salesforce訂閱主題
- 15. AppFabric主題訂閱
- 16. MQTT主題訂閱
- 17. RxJS/Angular2:爲什麼我的主題訂閱者未被調用?
- 18. iOS訂閱應用功能
- 19. 如何使用Camel訂閱主題
- 20. 調用一個涉及主類的「小孩」類的功能
- 21. 訂閱Chrome的FCM主題
- 22. 的Kaazing主題訂閱
- 23. Dojo的發佈/訂閱 - 如何訂閱多個主題
- 24. ROS:訂閱功能不承認我的回調方法
- 25. 反應webpack設置 - 不能調用一個類作爲功能
- 26. 訂閱JMS中的多個主題
- 27. Mqtt訂閱Contiki的多個主題
- 28. 閱讀關於訂閱的MQTT主題
- 29. 覆蓋父主題的功能WordPress的
- 30. 使用插件調用主題主題功能
似乎你在派生類中定義了行爲函數,並且子類會覆蓋它們,並且你想使用子類的函數作爲回調函數,對吧? –
實際上我沒有得到的是在父類中定義的函數,它的函數指針需要在主函數中傳遞。我只有一個兒童班的實例與 – user1415372