小编Edw*_*hen的帖子

无需克隆即可安全地将新型切片转换为内部变体

考虑以下示例(操场链接):

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)]Wrappermem::transmute它,但是我正在寻找方式完全安全的锈做到这一点。

我试图实现From,但是切片一直被认为是外来类型,因此我遇到了孤立规则(外来类型上的外来特征实现),禁止我这样做。

不幸的是,我只需要修改的能力fooWrapperbar是自动生成的。

有没有办法&[Wrapper]&[String]没有克隆的情况下安全地投射到?

rust

4
推荐指数
1
解决办法
234
查看次数

标签 统计

rust ×1