如何让Rust中内部const generics结构体的大小为外部的两倍?
实现Outer结构体const泛型的两倍大小作为Inner的泛型参数
你可以直接在Outer的结构体定义中使用2*SIZE作为Inner的const泛型参数,Rust支持在const泛型中使用编译期可计算的常量表达式。
修正后的完整代码
struct Inner<const DOUBLED_SIZE: usize>; impl<const DOUBLED_SIZE: usize> Inner<DOUBLED_SIZE> { pub fn print(&self) { println!("val: {}", DOUBLED_SIZE); } } struct Outer<const SIZE: usize> { pub inner: Inner<2*SIZE>, // 直接指定Inner的泛型为Outer SIZE的两倍 } fn main() { let outer = Outer::<40> { inner: Inner {} }; outer.inner.print(); // 输出:val: 80 }
关键说明
- Rust 1.55及以上版本支持在const泛型参数中使用常量表达式(如
2*SIZE),只要表达式结果是编译期可确定的常量即可。 - 实例化Outer时,编译器会自动根据Outer的
SIZE推导Inner的DOUBLED_SIZE为2*SIZE,无需手动给Inner指定泛型参数。
可选优化:添加构造函数
如果想简化实例化过程,可以为Outer实现一个构造函数:
impl<const SIZE: usize> Outer<SIZE> { pub fn new() -> Self { Self { inner: Inner {} } } } // 使用构造函数实例化 fn main() { let outer = Outer::<40>::new(); outer.inner.print(); }
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

