gpt4 book ai didi

C++ 如何通过回调方法访问成员变量

转载 作者:太空狗 更新时间:2023-10-29 19:53:38 28 4
gpt4 key购买 nike

我正在使用 SQLite 的 sqlite3_exec 函数和静态回调函数来处理一些信息。我想将结果信息打印到一个名为 sqlite3_exec 的类中定义的文件中。我所说的看起来有点像这样,

class MakingTheCall{

static int CallBack(void *NotUsed, int argc, char **argv, char **azColName)
{
for(int x = 0; x < argc; x++)
File << argv[x];
File<<"\n";
}

private:
static ofstream File;
void call(){
sqlite3_exec(database, query, callback, 0, &zErrMsg);
}
};

真正想要的是让静态函数使用特定于实例的FILE。因此,MakingTheCall 的任何一个实例都会使调用通过它唯一的非静态 FILE 对象。

但是因为 CallBack 是静态的并且必须(我认为)是一个回调,所以它无法访问类的 this 指针。所以我的想法是,如果 friend 函数所在的函数,那么它可以获取 this 指针。这是假设我理解 this正确发布。

我觉得我的思路有问题。感觉对于函数将使用哪个 this 可能仍然存在歧义。

作为本次讨论的第 2 部分,是否有任何地方可以使用静态友元方法的示例?从我正在阅读的内容来看,它们不是相互排斥的修饰符 here在第一条评论上,那么你什么时候会同时使用这两者?

我是 SQLite 和 CallBacks 的新手,所以我很可能在这里遗漏了一些可以让我的生活变得轻松的东西。像 void* 指针一样,我该如何使用它?这感觉就像是我想要做的事情的关键。

提前致谢。

最佳答案

sqlite3_exec() 调用中传递对象指针:

sqlite3_exec(database, query, callback, (void*) this, &zErrMsg);

您将在回调的 NotUsed 参数中取回它:

static int CallBack(void *NotUsed, int argc, char **argv, char **azColName)
{
MakingTheCall* obj = (MakingTheCall*) NotUsed;

// whatever....
}

严格来说,Callback() 函数应该是一个extern "C" 自由函数,而不是静态成员。

关于C++ 如何通过回调方法访问成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12201240/

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