我在C中包装了一些sqlite3 C代码,并且对此函数中的这种类型的参数void(*)(void *)感到困惑
int sqlite3_bind_blob(sqlite3_stmt *,int,const void *,int n,void(*)(void *));
所以我的包装看起来像
int Query::Blob(int index, const void* blob, int blob_size, void* memory_management){
return sqlite3_bind_blob(stmt, index, blobl, blob_size, memory_management);
}
我应该能够将以下内容传递给最后一个参数
>一些函数来释放blob内存
> SQLITE_STATIC或SQLITE_TRANSIENT定义
这两个定义不出所料地定义为
typedef void(* sqlite_3_destructor_type)(void *);
但我真的不明白void / void语法.如何在我的C方法中包装它以接受像delete或者定义这样的函数?
解决方法:
void(*)(void *)类型是指向非成员函数的指针,该函数接受void *类型的单个参数并返回void.
因此,如果您的memory_management函数声明为:
void memory_management(void *);
然后它匹配此定义,Query :: Blob应定义为:
int Query::Blob(int index, const void* blob, int blob_size, void (*memory_management)(void *)){
return sqlite3_bind_blob(stmt, index, blobl, blob_size, memory_management);
}
标签:c,sqlite3 来源: https://codeday.me/bug/20190731/1586049.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。