[英]How to write a trait bound for a reference to an associated type on the trait itself?
我有以下代码:
extern crate serde;
use serde::de::DeserializeOwned;
use serde::Serialize;
trait Bar<'a, T: 'a>
where
T: Serialize,
&'a T: DeserializeOwned,
{
}
我想使用关联类型来编写此代码,因为类型T
对于该类型的用户并不重要。 我到这为止了:
trait Bar {
type T: Serialize;
}
我不知道如何指定另一个界限。
最终,我想使用如下函数:
extern crate serde_json;
fn test<I: Bar>(t: I::T) -> String {
serde_json::to_string(&t).unwrap()
}
“正确”的解决方案是将边界放在特征上,但要引用关联的类型。 在这种情况下,您还可以使用排名较高的特征范围来处理引用:
trait Bar
where
Self::T: Serialize,
// ^^^^^^^ Bounds on an associated type
for<'a> &'a Self::T: DeserializeOwned,
// ^^^^^^^^^^^ Higher-ranked trait bounds
{
type T;
}
但是,这还行不通。
我相信您将需要:
where
子句 。 同时,解决方法是在需要的地方复制绑定:
fn test<I: Bar>(t: I::T) -> String
where
for<'a> &'a I::T: DeserializeOwned,
{
serde_json::to_string(&t).unwrap()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.