我有以下我无法控制的外国特质:
pub trait Foo<T> { fn foo(input: &T) -> Self; }
我想实现这个特征,作为生活在T内部的无尺寸类型的参考
impl Foo<Bar> for &[String] { fn from_ref(input: &Bar) -> Self { &input.bar } }
问题是它不能编译。它需要输入才能超过返回值。之所以如此,是因为它存储了它。
我尝试添加显式的生命周期,但显然我无法为输入和输出添加生命周期;由于函数签名,条形图。我也不能限制where子句中的隐式生存期。
你无法实现你想要的东西。trait接口没有定义以下对象之间的生命周期关系 input 和 Self 因此,实施不能建立一个。
input
Self
为了做到这一点,该特征需要:
在其上定义并与参考链接的寿命:
pub trait Foo<'a, T> { fn foo(input: &'a T) -> Self; }
要使用泛型关联类型:
pub trait Foo<T> { type Ref<'a> where T: 'a; fn foo<'a>(input: &'a T) -> Self::Ref<'a>; }