problem
我有一个来自 C 库的以下 C 回调签名Foo
:
void (* RequestCallbackFunc)(int)
该库还提供了用于注册所述回调的实用函数。
extern void SetRequestCallback(RequestallbackFunc request_cbf);
我有一个 C++ 课程App
使用实例方法HandleRequest
。正确的拥有方式是什么HandleRequest
打电话时request_cbf
叫做?
我天真的解决方案
App.hpp
#include <Foo.h> // include my C library
#include <Bar.hpp>
class App {
public:
App();
~App();
void HandleRequest(int x);
public:
Bar * bar_; // raw pointer for demonstration purposes
}
App.cpp
#include "App.hpp"
extern "C" {
static void handle_request(int x);
}
static void handle_request(int x) {
static std::auto_ptr<App> my_app( new App() );
my_app->HandleRequest(x);
}
App::App() {
SetRequestCallback( handle_request );
bar_ = new Bar();
}
App::~App() {
delete bar_;
}
void App::HandleRequest(int x) {
bar_->DoSomething( x );
// more 'work'...
}
我是否以正确的方式处理这个问题?是否有其他方法可以将 C++ 与 C 回调连接起来?
这样做的目的是什么int
回调中的参数?
设计良好的 C 接口 API 通常提供一种将“状态”参数传递给 C 函数回调的方法(可用于传递一些信息,例如 C++ 类实例)this
指针),如创建线程 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx's LPVOID lpParameter
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)