是否可以影响 C++ 中回调函数的局部变量?
Is it possible to affect local variables from a callback function in C++?
我正在为我正在开发的应用程序修补SQLite。据我所知,描述如何从SQLite数据库中获取信息的最清晰的文档与使用带有回调的sqlite3_exec((有关。
我打算在我的程序中有很多不同类型的查询,以及结果的不同用途,如果我走那条路,似乎我将不得不为每个查询编写回调。我宁愿做的是准备一个具有必要大小和类型的局部变量来接收查询结果,调用查询并将结果汇集到局部变量中。
在我看来,我有三个选择:
- 通过引用将我的变量传递到回调中
- 让回调以某种方式直接访问我的局部变量
- 花更多的时间研究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
相关文章:
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 函数局部静态变量:从性能角度来看的优点/缺点
- 是否可以影响 C++ 中回调函数的局部变量?
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- C++ - 指向函数中局部变量的指针
- 如何在 C++ 的 lambda 函数中传递同名的局部变量和参数(使用此关键字)?
- Clang++ 6.0 内存清理器未报告返回值指示条件分支的函数中的未初始化局部变量
- 如何将局部变量传递给 lambda 函数
- 局部变量的作用域是块或函数
- 函数原型未初始化的局部变量
- 尝试声明函数的局部变量,但得到范围错误
- 为什么堆栈中的函数局部变量之间存在内存空间
- 返回函数局部变量作为引用
- 函数局部变量在函数调用之间保持不变
- 对静态函数局部变量的引用