映射c数组

问题描述 投票:0回答:1

C结构如何?

typedef struct {
    double a;
    int8_t b[5];
    int32_t c;
} Foo;

成功在Swift中建模吗? (为避免歧义,使用固定宽度的整数,请随时将其替换为charint

将C结构导入Swift时,静态大小的数组将转换为元组,并且保证内存布局是相同的。但是,采用另一种方法并不容易,因为这需要我们手动指定可能较长的元组类型。

为了澄清:以上结构可以建模为

struct Foo {
  var a: Double
  var b: (Int8, Int8, Int8, Int8, Int8)
  var c: Int32
}

是否有一种方法可以简化此过程,例如使用预处理器宏或像c ++的std::array这样的特殊类型?例如,如下所示:

struct Foo {
  var a: Double
  var b: C_CHAR_ARRAY(5)
  var c: Int32
}
c arrays swift interop
1个回答
0
投票

您的帖子中有几个问题,所以我将尝试回答所有问题。

Swift中结构的布局不像C中那样按源顺序排序,因此您不能在Swift中编写相同的结构表示形式。编译器可以根据需要打包和重新排列它。因此,如果要使用C布局,则必须使用C来定义结构。

作为一种简单的方法来创建由一定数量的元素组成的元组,没有一种简单的方法可以做到这一点。您可以用C定义它,手写所需的内容,或使用Sourcery之类的工具来生成它。

© www.soinside.com 2019 - 2024. All rights reserved.