根据我提出的这个问题的答案: 如何在C++中创建的Rust代码中保留Rust对象? 我可以把在Rust中分配的东西通过
我该怎样让它工作?基本上,我需要创建一个Rust结构体,可以被许多人访问,并且可以被这些人中的一个可变地借用。这就是为什么我选择了
Box
传回C,然后再次接收它作为对&T
的引用,因为Rust会按照C ABI分配Sized
结构体。
我想做同样的事情,但现在是针对Rc<RefCell<T>>
。我应该返回Rc<RefCell<T>>
的Box
吗?我的猜测是否定的,因为Rc
没有实现Sized
,而Box<T>
根据Box页面需要T
实现Sized
。因此,这种方法行不通:
#[no_mangle]
pub extern "C" fn foo_new() -> Box<Rc<RefCell<T>>> {
Box::new(Foo { glonk: false })
}
我该怎样让它工作?基本上,我需要创建一个Rust结构体,可以被许多人访问,并且可以被这些人中的一个可变地借用。这就是为什么我选择了
Rc<RefCell<T>>
。也许还有另一种类型的结构可以做到我想要的,并且对C友好吗?
Rc
确实实现了Sized
。您是如何得出相反的结论的? - E net4impl Sized for Rc
。所以我应该使用Box<Rc<RefCell<T>>>
吗?我不能简单地使用Rc<RefCell<T>>
吗?我找不到它是否具有与Box
相同的属性(即,其内存布局类似于 C 布局)。 - PPP