可以使用特征类型的std :: rc :: Rc吗?

Sta*_*rov 5 rust

代码如下所示:

// Simplified
pub trait Field: Send + Sync + Clone {
    fn name(&self);
}

#[deriving(Clone)]
pub enum Select {
    SelectOnly(Vec<Rc<Field>>),
    SelectAll
}
Run Code Online (Sandbox Code Playgroud)

错误是:

the trait `core::kinds::Sized` is not implemented for the type `Field+'static`
Run Code Online (Sandbox Code Playgroud)

有没有其他方法让向量具有特征类型的引用计数不可变对象?

我想我可以像这样重写代码:

#[deriving(Clone)]
pub enum Select {
    SelectOnly(Vec<Rc<Box<Field>>>),
    SelectAll
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

Vla*_*eev 3

我相信 DST 应该可以实现,但 Rust 还没有实现。DST 的主要动机正是希望将特征对象与任何类型的智能指针一起使用。据我所知,这应该可以在 1.0 版本中实现。

实际上,您可以使用 来作为临时解决方法Rc<Box<T>>,尽管这种双重间接寻址很不幸。