当前位置:  开发笔记 > 编程语言 > 正文

我需要在c ++中创建一个简单的回调?我应该使用boost :: function吗?

如何解决《我需要在c++中创建一个简单的回调?我应该使用boost::function吗?》经验,为你挑选了1个好方法。

假设我有一些像这样的代码:

class Visitor {
   public:
      Visitor(callBackFunction) {}
      void visit() {
          //do something useful
          invokeCallback();
      }
}

class ClassThatCanBeVisited {
    Visitor &visitor;

    public:
       ClassThatCanBeVisited(Visitor &_visitor) : visitor(_visitor){}
       void someUsefulMethod() {
          int data= 42;
          visitor.visit(data);
       }
};


void callBackFunction() {
    //do something useful in the context of the Main file
}
int main() {
     Visitor visitor;
     ClassThatCanBeVisited foo(visitor);
     foo.someUsefulMethod();
}

我需要创建一个简单的回调,只要调用Visitor :: visit(),就会调用它.我知道我可能应该将回调代码放在我的访问者中,但是它位于不同的上下文中,所以我想将callBackFunction()传递给Visitor,这样他就可以调用我的回调函数了.

我在网上查找了东西并看到了boost :: function,但是c ++已经有了基本的函子.

我应该使用哪一个更清晰的代码?回调将是一个简单的void()函数,但它可能会增长,你永远不会知道未来:)

建议的方法是什么?



1> Doug T...:

是的boost :: function会做得很好.这是一个非常常见的用法.您需要使用boost :: bind将实例绑定到成员函数.

 func = boost::bind( &MyClass::CallbackFunc, this);

将是你如何在课堂上做到这一点.

确保"this"不会消失,或者你的升压功能会在某个升压头中间崩溃.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有