[英]Vector of traits bounded by Sized
我正在尝试查看是否有任何方法可以实现大小特征向量。 我知道特征对象,如果traitName
是?Sized
,则使用Vec<Box<dyn traitName>>
。 但是如果我有( https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=43d9ee07cfe643d32a00963aa066c929 ):
trait A: Sized {}
struct B {
c: u64,
}
impl A for B {}
fn lol() -> Vec<A> {
let mut a: Vec<A> = Vec::new();
let b = B { c: 2} ;
a.push(b);
a
}
我得到的错误是
8 | fn lol() -> Vec<A> {
| ^
|
help: add `dyn` keyword before this trait
但要解决这个问题,我必须使用特征对象,因为A: Sized
是不可能的。 有什么办法可以解决这个问题还是不可能?
A
其中A
是一个特征只是dyn A
的旧语法(在 2021 版中被禁止)。 如果A: Sized
永远无法创建A
或dyn A
如果您将在 2018 版中运行它, 您将收到错误“在编译时无法知道类型值的大小(dyn A + 'static)
” 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.