我做了一些搜索,发现了this Reddit post from four years ago,但不安全的代码除外:
fn find_mut <'a> (&'a mut self, elem: &T) -> Option<&'a mut Node<T>> {
unsafe{std::mem::transmute(self.find(elem))}
}
或宏,我想不出任何方法来做到这一点。
问题的其他重述:
现在有办法吗?
动机,以防万一这是另一个XY问题:我想编写一个处理引用向量的函数,读取但不修改它们,并且在需要的情况下我都想使用这些函数有&T
和&mut T
。
答案 0 :(得分:1)
根据您在消息末尾所描述的动机,我的理解是,您希望使用一个功能并且不修改基础的Vec<&T>
来检查Vec<&mut T>
和T
s。这是您想要的吗?请注意,我之所以使用切片的引用,是因为它比参数的引用更习惯用法,因为后者比矢量的引用更惯用。
use std::ops::Deref;
struct Foo;
fn do_stuff(_: &Foo) {}
fn process<T>(v: &[T])
where
T: Deref<Target = Foo>,
{
for x in v.iter().map(|x| x.deref()) {
do_stuff(x);
}
}
fn main() {
process(&[&Foo]);
process(&[&mut Foo]);
}
使用Borrow
代替Deref
,您也可以传递&[Foo]
。