是否有可能像&mut一样围绕&mut创建包装器

问题描述 投票:2回答:1

以下代码无法编译,因为MutRef不是Copy。由于&'a mut i32不是复制,因此无法复制。有什么办法可以使MutRef的语义类似于&'a mut i32

这样做的动机是能够将大量函数参数打包到一个结构中,以便可以将它们作为一个组进行传递,而不必单独传递。

struct MutRef<'a> {
    v: &'a mut i32
}

fn wrapper_use(s: MutRef) {
}

fn raw_use(s: &mut i32) {
}

fn raw_ref() {
    let mut s: i32 = 9;
    let q = &mut s;
    raw_use(q);
    raw_use(q);

}

fn wrapper() {
    let mut s: i32 = 9;
    let q = MutRef{ v: &mut s };
    wrapper_use(q);
    wrapper_use(q);
}
rust
1个回答
0
投票

编号

此功能的名称是“隐式重新借用”,当您传递&mut引用(编译器期望该&mut引用可能具有不同的生存期时),就会发生这种情况。仅当实际类型和预期类型都是&mut引用时,编译器才隐式重新借用。它不适用于generic arguments或包含&mut引用的结构。当前的Rust无法创建可以隐式重新借用的自定义类型。

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.