Pointers 如何将查询结果传递给函数?
我想做这样的事情Pointers 如何将查询结果传递给函数?,pointers,cppcms,Pointers,Cppcms,我想做这样的事情 function A(){ session database_handler(....); result res = database_handler << "SELECT ...."; functionB(res); } 函数A(){ 会话数据库_处理程序(..); result res=database_handler一种简单的方法是创建一个类似于结果集的结构。 填充该结构并将结构指针传递给函数 另一种方法是将函数声明为functi
function A(){
session database_handler(....);
result res = database_handler << "SELECT ....";
functionB(res);
}
函数A(){
会话数据库_处理程序(..);
result res=database_handler一种简单的方法是创建一个类似于结果集的结构。
填充该结构并将结构指针传递给函数
另一种方法是将函数声明为functionB(result res),即它接受result类型的参数,然后从“res”提取查询结果。您可以安全地复制cppdb::result
,但只能在一个位置对其进行迭代。即cppdb::result
保存引用(已计数)因此,如果您在functionB
中迭代行,则无法在function
中迭代行
因此,您可以安全地定义
void functionB(cppdb::result res);
但是,就迭代而言,它与
void functionB(cppdb::result &res);
最后一个更快,因为它不涉及引用计数开销。“它不起作用”不是一个非常准确的描述。这是真的,但我不确定会发生什么(可能制作了一个空副本),因此我倾向于避免详细信息,也因为我认为这对于使用cppdb的人来说是一个简单的问题。API文档说引用是复制的,但数据不是。尽管如此,在functionB
中发生的事情中,数据应该在那里,res
只在A()末尾超出范围
。当您在A()
中检查时,是否确保res
中有数据?我终于找到了错误。我使用相同的函数b对多个结果进行迭代,就像只对一个结果进行迭代一样。当我考虑到只有一个结果的情况时,我编写if(!result.next())//没有结果
。那句话使指针前进,使抓取失败。谢谢你的帮助。你是如何链接的?你介意帮忙吗?第二种方法是我正在使用的方法,但我在函数B中犯了一个错误。问题解决了,谢谢!