假设我有一些像这样的代码:
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()函数,但它可能会增长,你永远不会知道未来:)
建议的方法是什么?
是的boost :: function会做得很好.这是一个非常常见的用法.您需要使用boost :: bind将实例绑定到成员函数.
func = boost::bind( &MyClass::CallbackFunc, this);
将是你如何在课堂上做到这一点.
确保"this"不会消失,或者你的升压功能会在某个升压头中间崩溃.