gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:34:49 25 4
gpt4 key购买 nike

假设我有这样的代码:

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() 传递给访问者,以便他可以调用我的回调函数。

我在网上找了东西,看到了boost::function,但是c++已经有了基本的仿函数。

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

推荐的方法是什么?

最佳答案

是的,boost::function 可以很好地做到这一点。这是它的一个非常常见的用法。您将需要使用 boost::bind 将实例绑定(bind)到成员函数。

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

你会如何在类里面做到这一点。

确保“this”不会消失,否则您的 boost 函数会在某处某个 boost header 的中间崩溃。

关于c++ - 我需要在 C++ 中创建一个简单的回调?我应该使用 boost::function 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com