1

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

4

3 回答 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 回答