【发布时间】:2020-10-09 12:50:57
【问题描述】:
根据我的这个问题的答案:How to hold Rust objects in Rust code created through C++? 我可以将在 Box 内的 Rust 中分配的东西传递回 C,然后作为对 &T 的引用再次接收它,因为 Rust 分配了 @987654325 @ 尊重 C ABI 的结构。
我想做同样的事情,但现在是 Rc<RefCell<T>>。我应该将Box 返回到Rc<RefCell<T>> 吗?我猜它不会,因为Rc 没有实现Sized,这是Box<T> 中的T 所必需的according to the Box page。所以这行不通:
#[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_net4theclosevoter 我在 Rust 网站的 Rc 页面上找不到
impl Sized for Rc。所以我应该使用Box<Rc<RefCell<T>>>?我不能简单地使用Rc<RefCell<T>>?找不到和Box一样的属性(就是它的内存布局跟C布局一样)
标签: rust