rust中常量泛型的算法

xt0899hw  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(94)

考虑以下两个示例:

struct Polynomial<const DEGREE: usize> {
    factors: [isize; DEGREE + 1],
}

struct GenericSudoku<const SIZE: usize> {
    board: [[Option<usize>; SIZE.pow(2)]; SIZE.pow(2)],
}

字符串
由于常量泛型(as decribed here)上的算术运算,这些代码无法编译。
然而,拥有从其他const泛型派生但不等于其他const泛型的const泛型将非常方便。
有没有其他方法可以做到这一点?

fcipmucu

fcipmucu1#

你可以在晚上使用#![feature(generic_const_exprs)],或者如果你觉得勇敢,使用typenumgeneric-array

use std::ops::{Add, Mul};

use generic_array::{ArrayLength, GenericArray};
use typenum::{op, U1};

struct Polynomial<Degree>
where
    Degree: Add<U1>,
    <Degree as Add<U1>>::Output: ArrayLength,
{
    factors: GenericArray<isize, op!(Degree + U1)>,
}

struct GenericSudoku<Size>
where
    Size: Mul,
    <Size as Mul>::Output: ArrayLength,
{
    board: GenericArray<GenericArray<Option<usize>, op!(sqr(Size))>, op!(sqr(Size))>,
}

type FourthDegreePolynomial = Polynomial<typenum::U4>;
type VeryLargeSudoku = GenericSudoku<typenum::U100>;

字符串
正如你所看到的,它可以很快变得非常笨拙。

相关问题