所以我正在构建一个机器人代码框架,我有一个问题就是要编译它。我有一个名为Behavior的类,它被扩展为创建所有行为。我在其中实现了一系列所有行为都需要的回调函数。但是,我不能使用父类函数作为给定行为类的子项的回调函数。 (这是c ++)。我怀疑这与C ++中的函数指针有关,我不明白。你们中有谁能解释如何做到这一点吗?
答案 0 :(得分:1)
你对这里的背景有点了解,但是会有这样的帮助:
class Behaviour {
public:
void callback1() {
child_behaviour1();
}
private:
virtual void child_behaviour1() = 0;
}
然后在派生类的child_behaviour1()
中提供必要的行为,并使用Behaviour::*callback1
作为指针?
答案 1 :(得分:1)
这可以通过在C ++中使用函数指针来完成。
在基类中使用typedef编写函数指针(用于派生类中的函数)。还要编写函数来注册派生类调用函数,如下所示:
<强> 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(基函数指针)从基类调用自定义派生类函数
答案 2 :(得分: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();
这可以根据您的描述满足您的需求。