我希望我的特质取决于 Serde 的特质:
pub trait MyTrait: Serialize + DeserializeOwned {}
#[derive(Serialize, Deserialize)]
pub struct MyStruct<T: MyTrait> {
value: T,
}
impl MyTrait for i32 {}
impl MyTrait for MyStruct<i32> {}
Run Code Online (Sandbox Code Playgroud)
(完整代码)
但我收到这个错误:
pub trait MyTrait: Serialize + DeserializeOwned {}
#[derive(Serialize, Deserialize)]
pub struct MyStruct<T: MyTrait> {
value: T,
}
impl MyTrait for i32 {}
impl MyTrait for MyStruct<i32> {}
Run Code Online (Sandbox Code Playgroud)
我不知道这在这种情况下意味着什么。我不明白它与有关 E0283 的信息有何关系。
(我认为这DeserializeOwned就是我想要的基于Serde 生命周期信息,但我找不到任何有关“扩展”特征的信息,所以我可能是错的)。
一般来说,避免对struct. 相反,将边界放在impl需要这些边界的方法块上:
#[derive(Serialize, Deserialize)]
pub struct MyStruct<T> {
value: T,
}
impl<T> MyStruct<T> where T: MyTrait {
fn do_stuff(&self) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
struct解决块与块的约束的方式之间的差异impl有点微妙,但足以说明它是不同的,并且此更改应该使您的代码按预期工作。
| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |