gpt4 book ai didi

c++ - 将 C++ 实例方法与 C 回调函数混合

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

问题

我从名为 Foo 的 C 库中获得了以下 C 回调签名:

void (* RequestCallbackFunc)(int)

该库还提供了一个用于注册所述回调的实用函数。

extern void SetRequestCallback(RequestallbackFunc request_cbf);

我有一个 C++ 类 App 和一个实例方法 HandleRequest。在调用 request_cbf 时调用 HandleRequest 的正确方法是什么?

我天真的解决方案

应用.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
}

应用程序.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 回调接口(interface)?

最佳答案

回调中 int 参数的用途是什么?

设计良好的 C 接口(interface) API 通常提供一种将“状态”参数传递给 C 函数回调的方法(可用于传递一些信息,如 C++ 类实例 this 指针),例如CreateThreadLPVOID lpParameter

关于c++ - 将 C++ 实例方法与 C 回调函数混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901882/

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