C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,void (*memory_management)(void *)){
   return sqlite3_bind_blob(stmt,memory_management);
}

大佬总结

以上是大佬教程为你收集整理的c – 将参数传递给void(*)(void *)全部内容,希望文章能够帮你解决c – 将参数传递给void(*)(void *)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。