【问题标题】:How to implement a method that works for all struct type parameters?如何实现适用于所有结构类型参数的方法?
【发布时间】:2021-03-23 15:07:12
【问题描述】:

我有以下结构

struct Position<T> {
    ns: i32,
    we: i32,
    orientation: T
}

我希望有以下方法,而不必为 TI 打算使用的每种类型重复其实现,因为方法实现实际上并不依赖于 TI 会认为这是可能的,但我不能弄清楚怎么做。

impl Position {
    fn distance(&self) -> i32 {
        self.ns.abs() + self.we.abs()
    }
}

我尝试在 impl 行中添加一个类型参数,但显然这只适用于具体类型而不适用于类型变量,这是我需要在这里做我想做的事情。我尝试过类似&lt;_&gt; 的方法,但也没有骰子。

这可能在 Rust 中实现吗?

【问题讨论】:

    标签: rust


    【解决方案1】:

    如果您在Position 上的方法适用于任何T,您可以将它们放在一个没有边界的impl 中:

    impl<T> Position<T> {
        fn distance(&self) -> i32 {
            self.ns.abs() + self.we.abs()
        }
        
        // fn ....
    }
    

    请记住,一个类型可以有多个 impl 块。所以如果你有需要绑定T的方法,可以添加

    impl<T: Clone> Position<T> {
        // fn ...
    }
    

    【讨论】:

    • 哦,好的,我尝试了 Position 旁边的 ,但我错过了 impl 旁边的 。这就是我所缺少的谢谢
    【解决方案2】:

    TPosition的内在部分,所以你需要impl Position&lt;T&gt;,但是T在impl块的范围内不存在(struct之间没有内在关系和impl 块,确实它们可以使用完全不同的参数名称),所以你需要声明它:

    impl<T> Position<T> {
        fn distance(&self) -> i32 {
            self.ns.abs() + self.we.abs()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 2010-11-24
      • 2021-04-03
      相关资源
      最近更新 更多