使用父类函数作为回调订阅主题

时间:2013-08-21 05:00:24

标签: c++ function pointers ros

所以我正在构建一个机器人代码框架,我有一个问题就是要编译它。我有一个名为Behavior的类,它被扩展为创建所有行为。我在其中实现了一系列所有行为都需要的回调函数。但是,我不能使用父类函数作为给定行为类的子项的回调函数。 (这是c ++)。我怀疑这与C ++中的函数指针有关,我不明白。你们中有谁能解释如何做到这一点吗?

3 个答案:

答案 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();

这可以根据您的描述满足您的需求。