繁体   English   中英

如何返回对临时值的引用?

[英]How to return reference to temporary value?

嗨,我想知道如何实现以下代码:

struct TimedCache<T> {
    data: RwLock<T>,
    f: fn() -> T,
}

impl<T> TimedCache<T> {
    fn get(&self) -> &T {
        &self.data.read().unwrap()
    }
}

因为我得到: cannot return reference to temporary value

实际上,非常可靠和简单 - 我们不返回&T ,而是返回一个守卫实现的特征,它允许我们到达&TDeref

impl<T> TimedCache<T> {
    fn get(&self) -> impl Deref<Target = T> + '_ {
        let lock = self.data.read();
        lock.unwrap()
    }
}

这具有引用的所有优点,并且没有任何缺点 - 您甚至不需要知道您实际上正在操作RwLock读取保护。 从外面看,这看起来像是一个实现deref()的 object 。

包括使用示例在内的完整示例在操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM