gpt4 book ai didi

rust - 可以将 std::rc::Rc 与特征类型一起使用吗?

转载 作者:行者123 更新时间:2023-11-29 07:50:23 28 4
gpt4 key购买 nike

代码如下所示:

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

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

错误是:

the trait `core::kinds::Sized` is not implemented for the type `Field+'static`

是否有任何其他方法可以让 vector 具有具有引用计数的特征类型的 immutable 对象?

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

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

这是正确的方法吗?

最佳答案

从 Rust 1.1 开始,可以使用 Rc 创建特征对象。这编译:

use std::rc::Rc;

trait Field: Send + Sync {
fn name(&self);
}

enum Select {
Only(Vec<Rc<Field>>),
All,
}

// ---

struct Example;
impl Field for Example {
fn name(&self) {}
}

fn main() {
let fields: Vec<Rc<Field>> = vec![Rc::new(Example)];
Select::Only(fields);
}

请注意,您的原始示例使用了Clone,但您不能将这样的特征制作成特征对象,因为它是not object safe。 .我已将其删除以回答问题。

我还删除了枚举变体名称的冗余。

关于rust - 可以将 std::rc::Rc 与特征类型一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26334928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com