我的目标是将结构体的方法调用委托给Trait的方法,其中Trait对象位于RefCell的Rc内部。
我尝试遵循这个问题的建议: How can I obtain an &A reference from a Rc<RefCell<A>>? 但是,我遇到了编译错误。
我尝试遵循这个问题的建议: How can I obtain an &A reference from a Rc<RefCell<A>>? 但是,我遇到了编译错误。
use std::rc::Rc;
use std::cell::RefCell;
use std::fmt::*;
use std::ops::Deref;
pub struct ShyObject {
pub association: Rc<RefCell<dyn Display>>
}
impl Deref for ShyObject {
type Target = dyn Display;
fn deref<'a>(&'a self) -> &(dyn Display + 'static) {
&*self.association.borrow()
}
}
fn main() {}
以下是错误信息:
error[E0515]: cannot return value referencing temporary value
--> src/main.rs:13:9
|
13 | &*self.association.borrow()
| ^^-------------------------
| | |
| | temporary value created here
| returns a value referencing data owned by the current function
我的示例使用 Display
作为特质(Trait)的实现;实际上,我有一个拥有十几个方法的 Trait。我想避免重复编写所有这些方法的模板代码,并且只需在每次调用中深入到 Trait 对象即可。
Deref
的智能指针的方法解决,而不是仅仅为主类型(在您的情况下为ShyObject)实现Deref
。 - trent