问题描述
#[derive(Deserialize)]
struct S<'d,T>
where T: Deserialize<'d>
{
foo: T,other_field: String
}
上面的代码编译失败,抱怨未使用的生命周期参数,
但如果我删除它,Deserialize
将失去生命周期。
不使用幻象标记或DeserializeOwned
可以使上述代码正确吗?
解决方法
如果您完全删除 where
子句,则代码有效。派生将自动为派生的 T: Deserialize<'de>
实现添加一个 Deserialize<'de>
绑定。
#[derive(Deserialize)]
struct S<T> {
foo: T,other_field: String
}
对于 Rust,通常不会在 struct/enum 声明中限制泛型类型。泛型类型仅适用于需要行为的 impl
块。