![]() |
1
50
不能直接将指针传递给C++函数对象作为C代码的函数指针 (或者甚至到C++代码)。
此外,要将回调可移植地传递给C代码,至少需要声明它
作为一个
在许多环境中,C和C++具有相同的调用约定,并且仅不同。
在名称管理中,任何全局函数或静态成员都可以工作。
但你还是需要把电话转到
|
![]() |
2
7
|
![]() |
3
5
不,当然。C函数的签名将参数作为函数。
函数的所有技巧都由 模板 功能:
|
![]() |
4
3
用C++编写的C回调函数必须声明为
请参阅此答案以了解更多详细信息(并在评论中查找有关回调必须是
|
![]() |
5
2
我认为你不能:
你应该使用的是免费的C++函数,或者类的静态函数。 |
![]() |
6
1
gcc允许您将成员函数指针转换为纯函数指针(纯函数指针调用的函数的第一个参数是
退房 respective link in the manual .
这需要
如果已经有了一个函数,那么以这种方式展平该函数可能意味着展平它的
但至少当您不使用函数时,这是有帮助的,并为
|
![]() |
7
0
这取决于这是静态方法还是实例方法,如果是静态方法,则可以将函数作为classname::functionname传递,如果是实例方法,则更为复杂,因为显然您需要绑定到某个实例,但不能像使用c等中的委托那样执行。 我找到的最好的方法是创建一个用对象实例和函数指针实例化的保持类,然后保持类可以直接调用函数。 |
![]() |
8
0
我会说“否”,因为C++的函子有重载操作符。
|
![]() |
9
0
嗯,也许你可以写一个自由的模板函数,把你的函数对象包装起来。如果他们都有相同的签名,这就可以了。如此(未测试):
这对所有接受两个int并返回一个int的函数都适用。 |
![]() |
10
0
许多接受函数指针回调的C API的用户状态都有一个void*参数。如果你有一个这样的函数,你就走运了——你可以使用一个exterm c函数,它把用户数据当作某种引用或键来查找函数,然后执行它。 否则,没有。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 6 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 6 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 6 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 6 月前 |