泛化指针可变性

时间:2018-07-12 08:50:57

标签: generics rust

我的用例比这要复杂一些,但是我试图通过这个抽象示例来简化问题。

说我有一个结构:

struct Foo {
    bar: u32,
    baz: u32,
    ....
}

我该如何编写一个get_bar函数来概括self参数的可变性?

伪代码:

impl Foo {
    fn<?PT> getBar(&PT self) -> &PT u32 where PT = {mut immut} {
        &PT self.bar
    }
}

如果使用可变指针调用,它将返回指向内部字段的可变指针;如果使用不可变的调用,则将返回不可变。

我的目标是基本上通过复制粘贴代码来避免定义每个函数的nonmut和mut版本:

impl Foo {
    fn get_bar(&self) -> &u32 { &self.bar }
    fn get_bar_mut(&mut self) -> &mut u32 { &mut self.bar }
}

如果函数的主体比这个复杂(我的情况是一个递归函数),它将变得非常讨厌,并且正在复制和粘贴很多代码,应避免某些事情。

0 个答案:

没有答案