将参数传递给void(*)(void*)

pee*_*r_2 3 c++ sqlite

我在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);
}
Run Code Online (Sandbox Code Playgroud)

我应该能够将以下内容传递给最后一个参数

  1. 一些功能可以释放blob内存

  2. 无论是SQLITE_STATICSQLITE_TRANSIENT定义

这两个定义不出所料地定义为

typedef void (*sqlite_3_destructor_type)(void*);

但我真的不明白void/void语法.如何在我的C++方法中包装它以接受类似函数delete或定义?

dbu*_*ush 5

该类型void(*)(void*)是指向非成员函数的指针,该函数接受一个类型的参数void *并返回void.

因此,如果您的memory_management函数声明为:

void memory_management(void *);
Run Code Online (Sandbox Code Playgroud)

然后它匹配此定义,并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);
}
Run Code Online (Sandbox Code Playgroud)