考虑以下示例(操场链接):
struct Wrapper(String);
async fn foo(my_slice: &[Wrapper]) {
bar(my_slice).await; // Error!
}
async fn bar(string_slice: &[String]) { ... }
Run Code Online (Sandbox Code Playgroud)
我在编写foo这样的代码时遇到了困难,以至于我可以在bar(my_slice)不克隆的情况下调用my_slice,因为String没有实现Copy.
我知道不安全的方法来做到这一点的:将一个#[repr(transparent)]上Wrapper和mem::transmute它,但是我正在寻找方式完全安全的锈做到这一点。
我试图实现From,但是切片一直被认为是外来类型,因此我遇到了孤立规则(外来类型上的外来特征实现),禁止我这样做。
不幸的是,我只需要修改的能力foo或Wrapper为bar是自动生成的。
有没有办法&[Wrapper]在&[String]没有克隆的情况下安全地投射到?
rust ×1