首页 > 解决方案 > 将参数传递给 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);
}

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

  1. 一些释放blob内存的函数

  2. 要么SQLITE_STATIC要么SQLITE_TRANSIENT定义

不出所料,这两个定义被定义为

typedef void (*sqlite_3_destructor_type)(void*);

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

标签: c++sqlite

解决方案


类型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);
}

推荐阅读