代码如下所示:
// 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)
这是正确的方法吗?
我相信 DST 应该可以实现,但 Rust 还没有实现。DST 的主要动机正是希望将特征对象与任何类型的智能指针一起使用。据我所知,这应该可以在 1.0 版本中实现。
实际上,您可以使用 来作为临时解决方法Rc<Box<T>>,尽管这种双重间接寻址很不幸。