如何在 C++ 中使用 C 空括号函数
how can I use c empty parentheses function, in c++?
我有一个使用这个函数原型的 C 库,我想在 C++
int mlx_key_hook(void *win_ptr, int (*funct_ptr)(), void *param);
但实际上,要求的功能是
int funct_ptr(int keycode, void *param);
事实上,我有这个问题:为什么要在参数中放置空?
然后,我问你如何使用适当的C++ funct_ptr调用此函数?
还是在更改funct_ptr原型后,我必须重新编译此库?
这不起作用:
mlx_key_hook(win_ptr, [](int keycode, void *param) -> int {
return 0;
}, NULL);
这项工作,但这不是我想要的:
mlx_key_hook(win_ptr, []() -> int {
return 0;
}, NULL);
最好的解决方案是使用使用适当函数原型的标头重新编译您的C++代码,即
int mlx_key_hook(void *win_ptr, int (*funct_ptr)(int keycode, void *param), void *param);
然后,将编译带有两个参数的 lambda 的代码片段。
另一种解决方案是使用 reinterpret_cast
.尽管不允许调用具有重新解释的签名(未定义的行为(的函数,但在允许调用之前,将重新解释的指针转换回其原始签名。
typedef int (*funct_ptr_good)(int, void *);
typedef int (*funct_ptr_bad)();
void foo(funct_ptr_bad fb) {
// This is a C++ version of what your C library does
funct_ptr_good fg = reinterpret_cast<funct_ptr_good>(fb);
fg(12345, NULL);
}
int main() {
funct_ptr_good fg = [] (int key, void * ptr) -> int {
cout << key << " " << ptr << endl;
return 0;
};
// foo expects a pointer that takes no parameters, in the same way that your C library does
foo(reinterpret_cast<funct_ptr_bad>(fg));
return 0;
}
以上打印12345 0
(演示(。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗