繁体   English   中英

超特征边界中的生命周期参数

[英]Lifetime parameters in supertrait bounds

我正在尝试为 object 定义一个可转换为字节切片的特征。 我本质上想说

trait Foo: AsRef<[u8]> + TryFrom<&[u8]> {}

不幸的是,除非我在引用上放置生命周期参数,否则它拒绝编译,如下所示:

trait Foo<'a>: AsRef<[u8]> + TryFrom<&'a [u8]> {}

这对我来说没有多大意义,因为生命周期'a与最终的try_from()调用有关,并且不应该是对象类型的一部分。 try_from()的实现复制了相关的字节,所以它的参数的生命周期真的不相关。)

不过,这似乎是一个比切片更普遍的问题; 你如何为超特征边界指定这样的生命周期参数? (显然'_不起作用。)有没有更好/更惯用的方式来表达这一点,还是我必须求助于某种手工定制的废话,比如

pub trait TryFromRef<T> { type Error; fn try_from(value: &T) -> Result<Self, Self::Error>; }

?

一个具有生命周期参数的特征绑定,该参数适用于所有生命周期,而不是某个特定的生命周期,可以使用所谓的更高等级的特征边界或 HRTB 来指定。 在您的情况下,这可能看起来像

trait Foo: AsRef<[u8]> + for<'a> TryFrom<&'a [u8]> {}

任何实现Foo的东西都必须满足TryFrom<&'a u8>的任何和所有选择'a ,因此Foo本身不需要生命周期。

也可以看看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM