当前位置: 首页 > 面试题库 >

Swift不能使用函数指针吗?

巴学潞
2023-03-14
问题内容

我正在尝试在Swift中使用C库,并且在调用任何将函数指针作为参数之一的函数时遇到麻烦。例如,我要在Swift中使用的lua.h文件的一部分看起来像这样:

LUA_API void  (lua_setuservalue) (lua_State *L, int idx);


typedef int (*lua_CFunction) (lua_State *L);

LUA_API void  (lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
                       lua_CFunction k);

我使用桥接头来访问库,并且从我的Swift代码中,我可以毫无困难地调用 lua_setuservalue 。但是,如果我尝试调用
lua_callk,则会 收到“使用未解析的标识符’lua_callk’”的信息。如果我从 lua_callk
的声明中删除了函数指针,则不会再出现此错误。任何帮助都非常感谢。


问题答案:

Apple已从beta 3开始提供函数指针,但是只能引用它们而不调用它们。

将Swift与Cocoa和Objective-
C结合使用

功能指针

C函数指针作为导入到Swift中CFunctionPointer<Type>,这Type是Swift函数类型。例如,将类型int (*)(void)为C 的函数指针导入到Swift中,如下所示:CFunctionPointer<() -> Int32>

Beta
3发行说明(PDF)

现在也可以导入函数指针,并且可以对其进行引用和传递。但是,您不能调用C函数指针或将闭包转换为C函数指针类型。



 类似资料:
  • 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个 指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是 函数指针。 函数指针的定义形式为: returnType (*pointerName)(param list); returnType

  • 函数指针基础语法 函数指针用于指向一个函数,函数名是函数体的入口地址。函数指针可以实现面向对象编程,可以实现软件分层设计(回调函数)。 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //数组指针 语法 梳理 //定义一个数组类型 //int a[10]

  • 本文向大家介绍指针数组、数组指针、函数指针的区别?相关面试题,主要包含被问及指针数组、数组指针、函数指针的区别?时的应答技巧和注意事项,需要的朋友参考一下 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32

  • 大部分情况下所有权是非常明确的:可以准确的知道哪个变量拥有某个值。然而,有些情况单个值可能会有多个所有者。例如,在图数据结构中,多个边可能指向相同的结点,而这个结点从概念上讲为所有指向它的边所拥有。结点直到没有任何边指向它之前都不应该被清理。 为了启用多所有权,Rust 有一个叫做 Rc<T> 的类型。其名称为 引用计数(reference counting)的缩写。引用计数意味着记录一个值引用的

  • 函数指针包含函数在内存中的地址。第4章介绍了数组名实际上是数组中第一个元素的内存地址。同样,函数名实际上是执行函数任务的代码在内存中的开始地址。函数指针可以传人函数、从函数返回、存放在数组中和赋给其他的函数指针。 要演示如何使用函数指针,我们修改图 5.15 的冒泡排序程序,变成图 5.26 的程序。新程序包括 main 和函数 bubble、swap、ascending 和 descending

  • 往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂。下面详细为大家介绍C语言中指针函数和函数指针。 指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数) 由于返回的是一个地址,所以类型说明符一般都是int。 在c语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元