有没有办法使用 boost 或 std bind() 以便我可以在 C API 中使用结果作为回调?这是我使用的示例代码:
#include <boost/function.hpp>
#include <boost/bind/bind.hpp>
typedef void (*CallbackType)();
void CStyleFunction(CallbackType functionPointer)
{
functionPointer();
}
class Class_w_callback
{
public:
Class_w_callback()
{
//This would not work
CStyleFunction(boost::bind(&Class_w_callback::Callback, this));
}
void Callback(){std::cout<<"I got here!\n";};
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
不,没有办法做到这一点。问题在于,C 函数指针从根本上说无非是一个指令地址:“转到这个地址,然后执行找到的指令”。您想要带入函数的任何状态都必须是全局的,或者作为参数传递。
这就是为什么大多数 C 回调 API 都有一个“上下文”参数,通常是一个空指针,您可以传入该参数,并且仅用于允许您传入所需的数据。
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |