无法使用 CoerceUnsized 将嵌套大小的类型强制为未设置大小的类型

Unable to coerce nested sized to unsized type using CoerceUnsized

我正在尝试使用 CoerceUnsized:

的功能
use std::rc::Rc;
use std::borrow::Borrow;

fn main() {
    // Create (sized) i32 wrapped in an rc.
    let a0: Rc<i32> = Rc::new(0i32);
    // Coerce to (unsized) Borrow<i32> wrapped in an rc.
    // Works fine in Beta and Nightly cause of CoerceUnsized.
    let a1: Rc<Borrow<i32>> = a0.clone();

    // Create (sized) i32 in nested rcs.
    let b0: Rc<Rc<i32>> = Rc::new(Rc::new(0i32));
    // Coerce to (unsized) Borrow<i32> in nested rcs.
    // Does not compile in Stable, Beta or Nightly.
    let b1: Rc<Rc<Borrow<i32>>> = b0.clone();

    println!("{}, {}", a1.borrow(), b1.borrow());
}

Playground

但是从 Rc<Rc<i32>>Rc<Rc<Borrow<i32>>> 的嵌套强制不编译。

为什么CoerceUnsized不能递归工作?是否有任何解决方法,例如显式转换?

Rc<i32> 转换为 Rc<Borrow<i32>> 只需要在 Rc 旁边添加一个 vtable 指针,它不会影响 [=12= 管理的内存].另一方面,将 Rc<Rc<i32>> 转换为 Rc<Rc<Borrow<i32>> 意味着将 vtable 指针 存储在内部 Rc 旁边。这将需要修改(并扩大)由外部 Rc 管理的内存(即,它实际上需要一个全新的分配)。您可以手动执行此操作,但这远远超出了强制转换的范围。