gpt4 book ai didi

rust - 实现 AsRef 的生命周期

转载 作者:行者123 更新时间:2023-12-03 11:39:22 24 4
gpt4 key购买 nike

我需要创建用于与 FFI 接口(interface)的 NewType 包装器。我想创建一个类似于 Rust 的 String 和 str 类型的接口(interface),所以我可以有一个拥有类型的包装器和一个引用的包装器。因为有时我正在处理来自 FFI 库将释放的原始指针的引用,而其他时候我需要获得所有权,以便 rust 释放内存。我希望能够通过在拥有的类型上实现 AsRef 来轻松地使用引用类型上的方法,但是我遇到了生命周期问题。
playground

pub struct MyInt(i64);

pub struct MyIntRef<'a>(&'a i64);

impl AsRef<MyIntRef<'_>> for MyInt {
fn as_ref(&self) -> &MyIntRef<'_> {
todo!()
}
}
此代码无法编译并出现以下错误:
= note: expected `fn(&MyInt) -> &MyIntRef<'_>`
found `fn(&MyInt) -> &MyIntRef<'_>`
该错误似乎表明我确实有正确的签名。为什么会失败?

最佳答案

我认为您刚刚混淆了特征参数类型。

pub struct MyInt(i64);

pub struct MyIntRef<'a>(&'a i64);

impl AsRef<i64> for MyInt {
fn as_ref(&self) -> &i64 {
&self.0
}
}

impl<'a> AsRef<i64> for MyIntRef<'a> {
fn as_ref(&self) -> &i64 {
self.0
}
}

关于rust - 实现 AsRef 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63833080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com