当前位置: 首页 > 知识库问答 >
问题:

rust 如何为一个带范型的结构体实现Display特征?

东郭思远
2023-05-13

语法问题。
已有代码

use std::fmt::Display;
use std::ops::Add;

// #[derive(Debug)]
struct Point<T: Add<Output = T>> {
    x: T,
    y: T,
}

impl<T: Add<Output = T>> Add for Point<T> {
    type Output = Point<T>;
    fn add(self, other_point: Point<T>) -> Point<T> {
        Point {
            x: self.x + other_point.x,
            y: self.y + other_point.y,
        }
    }
}

impl<T> Display for Point<T>{

}


fn main() {
    let a = Point { x: 1.0, y: 1.0 };

    let b = Point { x: 3.0, y: 4.0 };

    let c = a + b;

    println!("{:?}", c);
}

想请问下,impl Display for Point<T> 正确写法是啥样的?

共有1个答案

楚畅
2023-05-13
use std::fmt::{Display, Formatter, Result};
use std::ops::Add;

struct Point<T: Add<Output = T> + Display> {
    x: T,
    y: T,
}

impl<T: Add<Output = T> + Display> Add for Point<T> {
    type Output = Point<T>;
    fn add(self, other_point: Point<T>) -> Point<T> {
        Point {
            x: self.x + other_point.x,
            y: self.y + other_point.y,
        }
    }
}

impl<T: Display> Display for Point<T> {
    fn fmt(&self, f: &mut Formatter) -> Result {
        write!(f, "({}, {})", self.x, self.y)
    }
}

fn main() {
    let a = Point { x: 1.0, y: 1.0 };
    let b = Point { x: 3.0, y: 4.0 };
    let c = a + b;

    println!("{}", c);
}
 类似资料:
  • 我想让 data 是全局变量方便调用而不是在函数中传来传去,但 const 和 static 关键字好像都不支持。有什么好办法吗?

  • 我见过一个类似的问题,但是没有人告诉我如何为结构实现Ord。例如,以下内容: 这给了我一个错误: 我该怎么解决这个问题?我尝试将实现更改为: 并添加适当的和函数,但这给了我一个错误,即这两种方法都不是的成员。

  • 我的问题分为两个部分(因为我不能得到第一部分,我移到了第二部分,这仍然让我有疑问) 第1部分:如何将异构类型插入?起初我想通过来完成 例如。, 但是我得到了一个错误 第2部分:然后我去了文档并阅读了《使用允许不同类型值的特征对象》,并将问题简化为只是尝试将异构类型放入中。所以我完全按照教程进行操作,但我仍然会收到相同类型的错误(在文档的情况下,错误现在是。 我知道静态类型是Rust的重要组成部分,

  • 给定一个依赖于泛型类型参数的结构,我们可以定义一个实现依赖于该类型的关联函数吗? 我想将结构传递给例程,但根据内部类型,让关联的函数以不同的方式计算。这个例程还取决于结构中的成员,所以我宁愿不把所有东西都移到一个特质上。 例如,以下代码尝试根据所涉及的类型定义不同的函数: 这会导致编译器错误: 如果我将的定义转移到另一个特征中,我们就会遇到一个类似但不同的问题。 这会导致编译器错误: 严格来说,我

  • 我有一个特点,它是由同一个结构以不同的方式实现的。为了实现这一点,我有不同的结构,它们有不同的实现。对于抽象,我将这些结构称为A-Z: 有没有其他方法来实现这一点,以便结构的每个实例都有一个不同的trait实现,或者创建一个新结构是最好的方法? 我不熟悉编译语言。我所做的大部分工作都是使用Python和TypeScript。