gpt4 book ai didi

rust - 使用 Serialize 和 DeserializeOwned 作为 super 特征时无法解析 `T: serde::Deserialize<' de>`

转载 作者:行者123 更新时间:2023-11-29 08:13:55 36 4
gpt4 key购买 nike

我希望我的特征取决于 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> {}

( full code )

但是我得到这个错误:

error[E0283]: type annotations required: cannot resolve `T: serde::Deserialize<'de>`
--> src/main.rs:11:21
|
11 | #[derive(Serialize, Deserialize)]
| ^^^^^^^^^^^
|
= note: required by `serde::Deserialize`

我不知道在这种情况下这意味着什么。我不明白它与 info about E0283 有什么关系? .

(我认为 DeserializeOwned 是我想要的,基于 Serde lifetimes info ,但我找不到任何关于“扩展”特征的信息,所以我可能是错误)。

最佳答案

一般来说,avoid putting trait bounds on a struct .相反,为需要这些边界的方法将边界放在 impl block 上:

#[derive(Serialize, Deserialize)]
pub struct MyStruct<T> {
value: T,
}

impl<T> MyStruct<T> where T: MyTrait {
fn do_stuff(&self) {
...
}
}

structimpl block 的约束解决方式的差异有点微妙,但足以说明它是不同的,这种变化应该使您的代码按预期工作。

关于rust - 使用 Serialize 和 DeserializeOwned 作为 super 特征时无法解析 `T: serde::Deserialize<' de>`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51464671/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com