我創建我有魯斯特以下問題的一小工作示例:我如何構建任何實現特質的潛在許多結構?
trait TraitFoo {
fn foo(&self) -> i32;
}
struct StructBar {
var: i32,
}
impl TraitFoo for StructBar {
fn foo(&self) -> i32 {
self.var
}
}
impl StructBar {
fn new() -> StructBar {
StructBar { var: 5 }
}
}
struct FooHolder<T: TraitFoo> {
myfoo: T,
}
impl<T: TraitFoo> FooHolder<T> {
fn new() -> FooHolder<T> {
FooHolder { myfoo: StructBar::new() }
}
}
fn main() {
let aaa = FooHolder::new();
}
這失敗,編譯:
error[E0308]: mismatched types
--> src/main.rs:27:9
|
27 | FooHolder { myfoo: StructBar::new() }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter, found struct `StructBar`
|
= note: expected type `FooHolder<T>`
found type `FooHolder<StructBar>`
我希望能夠回到任何的可能有許多結構體從FooHolder::new()
方法實施TraitFoo
。我希望它在這種情況下可以預期任何T:TraitFoo
作爲返回類型,而不僅僅是StructBar
。
我已經嘗試了幾件事情,但像將new()
移入特徵之類的東西不會幫助我,因爲實施TraitBar
的新結構可能會將不同的參數帶入new()
。
謝謝!這是非常徹底的,正是我所期待的。 – Kevin