Generics 在使用泛型关联类型时,如何指示类型参数的生存期界限?

Generics 在使用泛型关联类型时,如何指示类型参数的生存期界限?,generics,rust,traits,lifetime,generic-associated-types,Generics,Rust,Traits,Lifetime,Generic Associated Types,我正在尝试为具有泛型类型的结构实现具有泛型关联类型的trait。我使用的是夜间版本1.47.0-nightly(2020-07-20f9a3086363f214f2b56b) 我有结构S1和S2,一个带有GAT的特征和一个实现: #![允许(不完整的功能)] #![特征(通用类型)] 使用core::marker::PhantomData; 结构S1(幻影数据); 结构S2(幻影数据; } S1的impl-MyTrait{ A型; } 这是可行的,但我想实现泛型T的特征: impl MyTra

我正在尝试为具有泛型类型的结构实现具有泛型关联类型的trait。我使用的是夜间版本
1.47.0-nightly(2020-07-20f9a3086363f214f2b56b)

我有结构
S1
S2
,一个带有GAT的特征和一个实现:

#![允许(不完整的功能)]
#![特征(通用类型)]
使用core::marker::PhantomData;
结构S1(幻影数据);
结构S2(幻影数据;
}
S1的impl-MyTrait{
A型;
}
这是可行的,但我想实现泛型
T
的特征:

impl MyTrait for S1{
A型;
}

我现在需要指出,
T
的寿命与
'a
的寿命一样长,这是
S2
的定义所要求的:

error[E0309]:参数类型'T'的有效期可能不够长
-->src/lib.rs:14:5
|
13 | S1的impl MyTrait{
帮助-考虑添加一个显式的生命周期绑定…
14 | A类;
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如何做到这一点

我发现了,但是它可能已经过时了,因为它声称代码还没有实现。但是,为什么像编译这样复杂的代码(并按预期工作)

也就是说,
T
不能包含除静态变量引用之外的任何引用


还请记住,GATs尚未稳定,功能可能仍然不完整。您可以在GATs上玩一玩,了解它的功能,但还没有为现实世界做好准备。

添加
T:'静态
的潜在缺点是什么?如果
T
寿命与
'a
,对于任何可能的
'a
,然后
T:'static
impl<T> MyTrait for S1<T> {
    type A<'a> = S2<'a, T>;
}
impl<T: 'static> MyTrait for S1<T> {
    type A<'a> = S2<'a, T>;
}