c++ - 将参数传递给 void(*)(void*)
问题描述
我在 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);
}
推荐阅读
- spring - RestTemple 自定义错误处理程序未捕获 ResourceAccessException
- c# - 如何使这种舍入算法适用于负数?
- javascript - 为什么javascript RegExp测试函数每次与标志一起使用时都会给出不同的结果?
- machine-learning - 可视化聚类结果
- java - 获取另一个对象的对象
- websocket - Vert.x SockJSHandler 类
- javascript - 检索多个值本地存储并在 div 元素中显示
- database - 如何加入编辑发布 DynamoDB(性能)
- c# - When should I use navigation properties to query the database?
- r - R:ggsurvplot 如何在 start.time(2 年)之前删除平线