作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为具有泛型类型的结构实现具有泛型关联类型的特征。我正在使用每晚版本1.47.0-nightly (2020-07-20 f9a3086363f214f2b56b)
。
我有结构S1
和S2
,具有GAT的特征和实现:
#![allow(incomplete_features)]
#![feature(generic_associated_types)]
use core::marker::PhantomData;
struct S1<T>(PhantomData<T>);
struct S2<'a, T: 'a>(PhantomData<(T, &'a ())>);
trait MyTrait {
type A<'a>;
}
impl MyTrait for S1<f64> {
type A<'a> = S2<'a, f64>;
}
这行得通,但我想实现通用
T
的特征:
impl<T> MyTrait for S1<T> {
type A<'a> = S2<'a, T>;
}
Playground
T
的生命周期与
'a
一样长,这是
S2
的定义所要求的:
error[E0309]: the parameter type `T` may not live long enough
--> src/lib.rs:14:5
|
13 | impl<T> MyTrait for S1<T> {
| - help: consider adding an explicit lifetime bound...: `T: 'a`
14 | type A<'a> = S2<'a, T>;
| ^^^^^^^^^^^^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds
如何才能做到这一点?
最佳答案
impl<T> MyTrait for S1<T> {
type A<'a> = S2<'a, T>;
}
T
在整个实现中都是固定的,包括其生存期。但是,生存期
'a
在使用时可能会有所不同。如果您需要
T
的生存期长于
'a
,那么对于所有可能的生存期都必须为true。因此,如果不更改该实现中的其他内容,
T
可以拥有的唯一生存期就是
'static
:
impl<T: 'static> MyTrait for S1<T> {
type A<'a> = S2<'a, T>;
}
也就是说,除了对静态变量的引用以外,
T
不能包含任何引用。
关于generics - 使用泛型关联类型时,如何指示类型参数上的生存期约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63034230/
我正在使用身份服务器 3 保护 Web 应用程序。我的应用程序分为 2 个 oidc 客户端,一个 ASP.Net MVC 客户端和一个使用 oidc-client javascript 库的 jav
我正在使用 Silex 构建一个小型后台项目,我正在使用 PdoSessionHandler 将 session 存储在数据库中。我已经成功地将 session 存储在数据库中,但似乎将 cookie
我是一名优秀的程序员,十分优秀!