Rust 如何从另一个trait对象创建trait对象?
Rust的最新稳定版本(1.27)允许为trait对象实现trait(Rust 如何从另一个trait对象创建trait对象?,rust,trait-objects,Rust,Trait Objects,Rust的最新稳定版本(1.27)允许为trait对象实现trait(dyn trait),因此我尝试了以下方法: 上述代码导致错误: error[E0277]:未满足特征绑定“%T1:T2” -->src/main.rs:21:19 | 21 |设t2:&t2=&t12; | -^^^ | | |特性'T2'没有为`&T1实现` 帮助:考虑删除1个主要的“引用” | =帮助:找到了以下实现: 您正在为trait对象本身(d
dyn trait
),因此我尝试了以下方法:
上述代码导致错误:
error[E0277]:未满足特征绑定“%T1:T2”
-->src/main.rs:21:19
|
21 |设t2:&t2=&t12;
| -^^^
| |
|特性'T2'没有为`&T1实现`
帮助:考虑删除1个主要的“引用”
|
=帮助:找到了以下实现:
您正在为trait对象本身(dynt1
)实现T2
),但尝试将其用于对trait对象的引用(&dynt1
)
尝试impl您正在为trait对象本身(dynt1
)实现T2
),但尝试将其用作trait对象的引用(&dynt1
)
请尝试使用Rust(1.27)的最新稳定版本-这是自Rust 1.0以来允许的。唯一新的是literaldyn
关键字。您的代码在没有它的情况下表现相同(impl T2 for T1{/*…*/}
)。最新的稳定版本Rust(1.27)允许-这是自Rust 1.0以来允许的。唯一新的是literaldyn
关键字。您的代码在没有它的情况下表现相同(implt2 for T1{/*…*/}
)。这是有原因的:作为T1
的“扩展”特性,我们可以从T2
调用方法,而不是T1
,就像我写t12.f2()
那样。但是如果这是我们应该对T使用implt2的唯一原因,其中T:T1
代替。这是有原因的:作为T1
的“扩展”特性,我们可以从T2
调用方法,而不是T1
,就像我写t12.f2()
那样。但是如果这是我们应该对T使用implt2的唯一原因,其中T:T1
。。。
trait T1 {
fn f1(&self);
}
trait T2 {
fn f2(&self);
}
impl T2 for dyn T1 {
fn f2(&self) {
self.f1()
}
}
struct S();
impl T1 for S {
fn f1(&self) {}
}
fn main() {
let t1 = S();
let t12: &T1 = &t1;
t12.f2();
let t2: &T2 = &t12;
t2.f2();
}