首页 > 解决方案 > 如何在通用结构中定义 const 闭包

问题描述

我正在尝试声明一个 const 闭包,以便可以在整个代码中使用:

    impl<T: Default + Copy + Eq> Profiler<T> {
    pub const increase_by_one: dyn Fn(&T) = &|x| {
        *x = *x + 1;
    };

但是我遇到了在编译时不知道大小的问题。

我也试过这个:

impl<T: Default + Copy + Eq> Profiler<T> {
    pub const increase_by_one: fn(&T) = &|x| {
        *x = *x + 1;
    };

但它说x必须知道的类型。

有没有办法在通用结构中定义闭包?

标签: rust

解决方案


今天不可能const在 Rust 中定义一个闭包,因为闭包的类型不能被命名。您可以使用函数指针 ( fn(&T)),但与闭包类型相比,这会产生调用时间开销。您可以使用'static特征对象引用 ( &'static dyn Fn(&T)),但这也有调用时间开销,并且需要一个T: 'static界限。

幸运的是,const永远不需要关闭。闭包和项目之间的唯一区别fn是闭包可以有状态,但consts 可能没有状态,因此将它们组合起来没有任何意义。只需使用关联函数而不是关联常量。

impl<T: AddAssign<i32>> Profiler<T> {
    pub fn increase_by_one(x: &mut T) {
        *x += 1;
    }
}

也可以看看


推荐阅读