问题
我已经从C库下面的C回调签名称为Foo
实例方法:混合使用C++使用C回调函数
void (* RequestCallbackFunc)(int)
该库还提供了一个效用函数为注册说回调。
extern void SetRequestCallback(RequestallbackFunc request_cbf);
我有一个C++ App
类与实例方法HandleRequest
。调用request_cbf
时调用HandleRequest
的正确方法是什么?
我天真的解决方案
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++?
这是真正的代码?你真的有一个整数参数回调?它应该做什么? – 2012-01-17 21:31:35
请注意,在您的代码中,注册回调的'A'不是接收回调的'A'。 – 2012-01-17 21:37:07
这不会编译:“static std :: auto_ptr A(new A());”,因为没有“A”类型。至少在提问前通过编译器运行你的代码。 –
SigTerm
2012-01-17 21:39:24