如何在 rust 中使用结构泛型来使用编译时已知大小的类型作为数组长度

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

如何使用编译时已知大小的泛型(

Sized
)作为基于其大小的结构数组长度

我有以下错误:

error: generic parameters may not be used in const operations
 --> src/lib.rs:4:43
  |
4 |     arr: [Key; 1024 / std::mem::size_of::<Key>()]
  |                                           ^^^ cannot perform const operation using `Key`
  |
  = note: type parameters may not be used in const expressions

对于以下代码

铁锈游乐场

type SomeKey = u64;

// This does not work
struct NotWorking<Key: Sized> {
    arr: [Key; 1024 / std::mem::size_of::<Key>()]
}

struct Working {
    arr: [SomeKey; 1024 / std::mem::size_of::<SomeKey>()]
}

generics rust
1个回答
0
投票

您目前无法稳定,它需要

#![feature(generic_const_exprs)]
,因此每晚,它目前还需要一个 where 子句来约束泛型,尽管
generic_const_exprs
仍然不完整,这可能会在实现过程中消失。

#![feature(generic_const_exprs)]
type SomeKey = u64;

struct NotWorking<Key: Sized> where [(); 1024 / std::mem::size_of::<Key>()]: {
    arr: [Key; 1024 / std::mem::size_of::<Key>()]
}
© www.soinside.com 2019 - 2024. All rights reserved.