【问题标题】:Returning pointer to a class field in Rust返回指向 Rust 中的类字段的指针
【发布时间】:2023-02-23 03:06:59
【问题描述】:

我试图用一个函数返回指向其中一个类字段的指针,以便不创建对象的副本并能够在函数之外编辑它们。该字段是我创建的某个结构的向量,名称为packets

我创建的函数如下,但IDE在编译前已经提示错误:

    pub fn get_packets(&mut self) -> *Vec<point::Point>::const {
        &self.packets
    }

我一直在通过在返回类的开头和结尾添加const、mut或其他来检查,但目前没有好的结果。显然,我不知道自己在做什么,所以我请求一点帮助。

【问题讨论】:

  • 1. 请阅读并发布您从编译器中得到的错误,虽然它的建议并不总是有用,但它的信息往往清晰明了。 2. 请贴出最少可复现的例子,stackoverflow 仍然不支付读心术等超能力,猜测很复杂。 3. 你在这里发布的小代码在语法上是无效的,你考虑过修复它吗? *T 不是有效的 Rust 类型,AFAIK 关联类型仅在特征上受支持,因为 Vec 是具体类型,这意味着 Vec&lt;T&gt;::U 也无效。
  • 我能说的最好的是,您的 sn-p 应该类似于 pub fn get_packets(&amp;self) -&gt; &amp;Vec&lt;???&gt; { &amp;self.packets }pub fn get_packets(&amp;self) -&gt; &amp;[???] { &amp;self.packets }

标签: pointers rust


【解决方案1】:

您正在使用不存在的语法。试试:

pub fn get_packets(&self) -> &Vec<point::Point> {
    &self.packets
}

或者

pub fn get_packets_mut(&mut self) -> &mut Vec<point::Point> {
    &mut self.packets
}

在 Rust 中很常见的是提供两种方法来获取参考到一个领域。一个获得共享的,一个获得独占/可变的。

您也可以通过返回 &amp;[point::Point] 隐藏 get_packets 版本中的实现细节。

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2016-05-22
    • 1970-01-01
    • 2018-07-29
    • 2022-06-15
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多