0
#[derive(Deserialize)]
struct S<'d, T>
  where T: Deserialize<'d>
{
  foo: T,
  other_field: String
}

上面的代码无法编译,抱怨未使用的生命周期参数,但如果我删除它,Deserialize会丢失生命周期。

上面的代码可以在不使用幻像标记的情况下正确DeserializeOwned吗?

4

1 回答 1

3

如果您完全删除该where子句,该代码将起作用。派生将T: Deserialize<'de>自动为派生Deserialize<'de>实现添加边界。

#[derive(Deserialize)]
struct S<T> {
  foo: T,
  other_field: String
}

对于 Rust,通常不在 struct/enum 声明中限制泛型类型。泛型类型只限于impl需要行为的块。

于 2021-05-19T10:08:35.883 回答