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

时间:2018-08-17 22:15:03

标签: c++ sqlite callback

我正在为正在处理的应用程序修改SQLite。据我所知,可用的最清晰的文档描述了如何从SQLite数据库中获取信息,这与对带回调的sqlite3_exec()的使用有关。

我打算在程序中使用很多不同类型的查询,并在结果中使用不同的方法,如果我要执行该溃败程序,似乎必须为每个查询编写回调。我更愿意做的是准备一个具有必要大小和类型的局部变量,以接收查询结果,调用查询并将结果集中到该局部变量中。

我看到的方式有三种选择:

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

所以,这就是我想从你们这里了解的事情:

选项1和2是否可行?如果没有,那么有没有关于sqlite的很好的一般示例,该示例如何在没有sqlite3_exec和可链接我的回调的情况下查询SQLite?

1 个答案:

答案 0 :(得分:3)

所有经过适当设计的接受回调的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