You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:55:36