[英]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
,而是返回一个守卫实现的特征,它允许我们到达&T
: Deref
!
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.