rust 构建一个const通用钳位函数

hujrc8aj  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(127)

所以我有两个usize和f32常数钳位功能。逻辑很简单:它什么也不做,只是将vallowhigh进行比较,然后返回范围内的合适值:

// you might have to switch up to nightly build:
// $ rustup default nightly

#![feature(const_trait_impl)]
#![feature(const_fn_floating_point_arithmetic)]
pub const fn usize_clamp(val: usize, low: usize, high: usize) -> usize {
    if val < low {
        return low;
    }
    if val > high {
        return high;
    }
    return val;
}

pub const fn f32_clamp(val: f32, low: f32, high: f32) -> f32 {
    if val < low {
        return low;
    }
    if val > high {
        return high;
    }
    return val;
}

现在我希望将它们合并为1:

pub const fn clamp<T: PartialOrd>(val: T, low: T, high: T) -> T {
    if val < low {
        return low;
    }
    if val > high {
        return high;
    }
    return val;
}

编译器告诉我通过添加~const std::cmp::PartialOrd来限制T的边界,所以我添加了它:

pub const fn clamp<T: PartialOrd + ~ const PartialOrd>(val: T, low: T, high: T) -> T {
    if val < low {
        return low;
    }
    if val > high {
        return high;
    }
    return val;
}

于是说

~const can only be applied to `#[const_trait]` traits

有人能告诉我如何解决这个问题吗?

3phpmpom

3phpmpom1#

一般来说,泛型const函数是一个半成品的特性,预计在稳定之前会发生变化,目前还不清楚它的最终形状。

相关问题