我在正式参考书中看到过这类代码
trait Bar<'a>: 'a { }
我还没想过这种情况。
我直觉地将一种类型的“生命界限”解释为:
some_reference: &'a Some_Type = &instance_of_Some_Type;
T: 'a // T is borrowed by "instance_of_Some_Type"
trait Bar<'a>: 'a { }
的含义是什么--有一种方法使用引用类型的参数?
和这个一样吗?
impl Bar<'a> for Another_Type
where
Another_Type: 'a
{
}
我想不出上述含义的用法,这个例子的用法是什么?我很难理解“特征的生命参数”的含义。
发布于 2021-01-06 09:00:25
在一个特征上的终身绑定是关于实现该特性的某个类型中的引用。
例如,'static
生命周期绑定在一个特征上意味着它不能由任何包含引用的结构实现,而这些引用并不比'static
更有效。
让我们以没有生命周期限制的例子为例:
trait Bar<'a> { }
这是一个基于生命周期'a
的参数化特性,但并不要求它的实现比'a
更有效,所以我们可以这样做:
struct HasRef<'b>(&'b i32);
impl Bar<'static> for HasRef<'_> { }
它说,任何HasRef
结构--即使是一个生命周期很短的结构--都实现了Bar<'static>
特性。
代写
trait Bar<'a>: 'a { }
表示实现Bar<'a>
的任何类型都必须至少与'a
一样长,这可能更有意义。
(这些界限对于特征对象特别重要(类型为dyn Trait
),因为只有特征本身才能使编译器了解该特性对象中引用的生存期。)
https://stackoverflow.com/questions/65598011
复制