Rust 寿命不';只有当结构中有一个特征对象时,它才能生存
代码:Rust 寿命不';只有当结构中有一个特征对象时,它才能生存,rust,lifetime,Rust,Lifetime,代码: 性状我的性状{ fn更新(&self,_prev:&self){未实现!()} } 性状肌肉疗法性状{ //当v1被注释掉时,代码工作 v1:&'a dyn MyOtherTrait{} 结构容器; impl容器{ //由PROC宏生成:无法更改 fn带_ref` 找到引用“%MyTraitDynWrapper”` 找到引用“&MyTraitDynWrapper&”dyn TraitSo TLDR一旦我基本上拥有了dyn traits,是的。说dyn Trait;底层类型可以很好地实现
性状我的性状{
fn更新(&self,_prev:&self){未实现!()}
}
性状肌肉疗法性状{
//当v1被注释掉时,代码工作
v1:&'a dyn MyOtherTrait{}
结构容器;
impl容器{
//由PROC宏生成:无法更改
fn带_ref`
找到引用“%MyTraitDynWrapper”`
找到引用“&MyTraitDynWrapper&”dyn TraitSo TLDR一旦我基本上拥有了dyn traits,是的。说dyn Trait
;底层类型可以很好地实现其他类型,就像它可以实现Debug
,Copy
,等等一样。但是你不能通过dyn Trait>使用它们
error[E0308]: mismatched types
--> src/lib.rs:33:23
|
33 | MyTrait::update(a, b)
| ^ lifetime mismatch
|
= note: expected reference `&MyTraitDynWrapper<'_>`
found reference `&MyTraitDynWrapper<'_>`
note: the anonymous lifetime #2 defined on the body at 32:14...
--> src/lib.rs:32:14
|
32 | b.with_ref(|b| {
| ____________________^
33 | | MyTrait::update(a, b)
34 | | })
| |_________^
note: ...does not necessarily outlive the anonymous lifetime #2 defined on the body at 31:13
--> src/lib.rs:31:13
|
31 | a.with_ref(|a| {
| ________________^
32 | | b.with_ref(|b| {
33 | | MyTrait::update(a, b)
34 | | })
35 | | });
| |_____^
error[E0308]: mismatched types
--> src/lib.rs:33:23
|
33 | MyTrait::update(a, b)
| ^ lifetime mismatch
|
= note: expected reference `&MyTraitDynWrapper<'_>`
found reference `&MyTraitDynWrapper<'_>`
note: the anonymous lifetime #2 defined on the body at 31:13...
--> src/lib.rs:31:13
|
31 | a.with_ref(|a| {
| ________________^
32 | | b.with_ref(|b| {
33 | | MyTrait::update(a, b)
34 | | })
35 | | });
| |_____^
note: ...does not necessarily outlive the anonymous lifetime #2 defined on the body at 32:14
--> src/lib.rs:32:14
|
32 | b.with_ref(|b| {
| ____________________^
33 | | MyTrait::update(a, b)
34 | | })
| |_________^
error: aborting due to 2 previous errors
pub struct MyTraitDynWrapper<'a> {
v1: &'a dyn for<'b> MyOtherTrait<'b>,
v2: &'a (),
}
pub struct MyTraitDynWrapper<'a, 'b> {
v1: &'a dyn MyOtherTrait<'b>,
v2: &'a (),
}
// ...
impl Container {
// GENERATED BY PROC MACRO: CANNOT CHANGE
fn with_ref<'outer_borrow, 'that, ReturnType>(
&'outer_borrow self,
user: impl for<'this> FnOnce(&'outer_borrow MyTraitDynWrapper<'this, 'that>) -> ReturnType,
) -> ReturnType {
unimplemented!()
}
}