How to implement the C flexible array member pattern in Rust?

后端 未结 1 860
天涯浪人
天涯浪人 2020-12-19 01:18

I would like to implement this C code which uses a flexible array member (sometimes called the struct hack) in Rust:

st         


        
相关标签:
1条回答
  • 2020-12-19 01:39

    The Rust equivalent of this struct would use a slice:

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

    however, these types are not really convenient to use at the moment as there is no safe way to construct them.

    A more practical way to do this is to use a generic:

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

    and then to make sure that you only use test when T is an array or a slice (which you could only create through coercion).

    See also:

    • Dynamically Sized Types (DSTs) on the nomicon
    0 讨论(0)
提交回复
热议问题