相关疑难解决方法(0)

如何抽象对值或值本身的引用?

我有一个特性,它定义了一个可以容纳值的对象的接口.特征有一种获取当前值的方法:

pub trait HasValue<T> {
    fn get_current_value(&self) -> &T;
}
Run Code Online (Sandbox Code Playgroud)

这很好,但我意识到,根据实际的实现,有时如果T存储在字段中则返回引用很方便,有时T如果跨线程共享支持字段,则返回克隆是很方便的(例如) .我正在努力弄清楚如何在特质中表现出来.我可以这样:

pub enum BorrowedOrOwned<'a, T: 'a> {
    Borrowed(&'a T),
    Owned(T)
}

impl<'a, T: 'a> Deref for BorrowedOrOwned<'a, T> {
    type Target = T;

    fn deref(&self) -> &T {
        use self::BorrowedOrOwned::*;

        match self {
            &Borrowed(b) => b,
            &Owned(ref o) => o,
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

get_current_value()改为返回,BorrowedOrOwned<T>但我不确定这是不是惯用的.BorrowedOrOwned<T>有点让我想起Cow<T>但是,既然Cow是写入时复制,我将丢弃任何写入,这似乎在语义上是错误的.

Cow<T>抽象引用或拥有值的正确方法是什么?有比这更好的方法BorrowedOrOwned<T>吗?

reference rust

3
推荐指数
1
解决办法
333
查看次数

标签 统计

reference ×1

rust ×1