所以我正在构建一个机器人代码框架,但在编译时遇到了问题。我有一个名为 Behavior 的类,它被扩展为创建所有行为。我在其中实现了所有行为所需的一系列回调函数。但是,我不能将父类函数用作给定行为类的子类的回调函数。(仅供参考,这是c ++)。我怀疑这与我不理解的 C++ 中的函数指针有关。你们中的任何人都可以解释如何做到这一点吗?
问问题
801 次
3 回答
1
这可以通过在 C++ 中使用函数指针来完成。
在基类中使用 typedef 编写函数指针(用于派生类中的函数)。还编写函数来注册派生类回调函数,如下所示:
行为.cpp
typedef (*CALLBCK)(in,int);
class Behavior {
CALLBCK funToBeCalled;
void register_callback(CALLBCK funPtr )
{
funToBeCalled = funPtr ;
}
}
完成此操作后,您可以使用 register_callback 从派生类代码注册派生类的回调函数。
派生的.cpp
class derived:public Behaviour{
inline void custom(int,int)
{
ur custom code
}
inline void somefun(){
..
..
register_callback(custom);
..
}
}
回调函数注册完成后,您可以使用 funToBeCalled(您的函数指针在基中)从基类调用自定义派生类函数
于 2013-08-22T07:20:44.990 回答
1
您对这里的上下文有点了解,但是这样的帮助:
class Behaviour {
public:
void callback1() {
child_behaviour1();
}
private:
virtual void child_behaviour1() = 0;
}
然后child_behaviour1()
在派生类中提供必要的行为并Behaviour::*callback1
用作指针?
于 2013-08-21T05:18:30.530 回答
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();
根据您的描述,这应该可以满足您的需求。
于 2013-08-21T05:31:14.417 回答