是否可以影响 C++ 中回调函数的局部变量?

Is it possible to affect local variables from a callback function in C++?

本文关键字:函数 局部变量 回调 影响 C++ 是否      更新时间:2023-10-16

我正在为我正在开发的应用程序修补SQLite。据我所知,描述如何从SQLite数据库中获取信息的最清晰的文档与使用带有回调的sqlite3_exec((有关。

我打算在我的程序中有很多不同类型的查询,以及结果的不同用途,如果我走那条路,似乎我将不得不为每个查询编写回调。我宁愿做的是准备一个具有必要大小和类型的局部变量来接收查询结果,调用查询并将结果汇集到局部变量中。

在我看来,我有三个选择:

  1. 通过引用将我的变量传递到回调中
  2. 让回调以某种方式直接访问我的局部变量
  3. 花更多的时间研究SQLite

所以,这就是我想从你们那里知道的:

选项 1 和 2 是否可行?如果没有,是否有任何非常好的通用案例示例来说明如何在没有sqlite3_exec的情况下查询SQLite,并且您可以将我链接到回调?

所有正确设计的接受回调的 C 语言 API 都允许您将void*(或类似(参数传递给 API,然后在调用时将其转发到您的回调。您可以使用此参数传递局部变量的地址。例如:

extern "C" int my_callback(void* dest /*, other args */) {
auto* result = static_cast<MyResultType*>(dest);
// modify *result appropriately
}
MyResultType result1;
sqlite3_exec(/* other args, */ query1, my_callback, &result1 /*, other args */);
// result of query1 is in result1
MyResultType result2;
sqlite3_exec(/* other args, */ query2, my_callback, &result2 /*, other args */);
// result of query2 is in result2