gpt4 book ai didi

c++ - 将参数传递给 void(*)(void*)

转载 作者:太空狗 更新时间:2023-10-29 20:20:06 27 4
gpt4 key购买 nike

我在 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_STATICSQLITE_TRANSIENT 定义

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

typedef void (*sqlite_3_destructor_type)(void*);

但是我真的不明白void/void语法。我如何将它包装在我的 C++ 方法中以接受像 delete 或 defines 这样的函数?

最佳答案

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

关于c++ - 将参数传递给 void(*)(void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54024727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com