加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:22:33 所属栏目:百科 来源:网络整理
导读:我在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_siz
我在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,void (*memory_management)(void *)){
   return sqlite3_bind_blob(stmt,memory_management);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读