代码之家  ›  专栏  ›  技术社区  ›  kirugan

如何在Rust中实现C柔性数组成员模式?

  •  7
  • kirugan  · 技术社区  · 6 年前

    flexible array member (有时被称为 the struct hack

    struct test {
      int key;
      int dataSize;
      int data[];
    };
    
    struct test* t = malloc(sizeof(struct test) + sizeOfData)
    

    结构末尾的空数组允许您同时分配元字段和数据。不幸的是,我不知道如何在铁锈中做这样的事。

    0 回复  |  直到 6 年前
        1
  •  2
  •   mcarton    5 年前

    此结构的锈当量将使用切片:

    struct test {
      key: i32,
      dataSize: i32,
      data: [i32],
    }
    

    然而,这些类型目前并不方便使用,因为没有安全的方法来构造它们。

    struct test<T: ?Sized> {
      key: i32,
      dataSize: i32,
      data: T,
    }
    

    然后确保你只使用 test T 是数组或切片(只能通过强制创建)。

    另见: