从 C++ 走向 rust(五):面向对象编程——设计一个泛型类

博主分享了在Rust中从零开始设计矩阵运算库的经历,发现Rust的struct与C++的class在方法定义上的不同,以及Rust泛型的特点。通过实例展示了如何定义带泛型的Vector结构体及其new方法,并强调了泛型数据类型需要支持Clone特性。文章适合对Rust编程感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打算从头设计一个矩阵运算库,结果发现面向对象编程与 c++ 差别巨大。搞了两个小时,终于实现了一个最简单的“类”。

1. struct 取代 c++ 的 class

这个不稀奇,因为 c++ 中 struct 与 class 用法几乎一样。但是,rust 的 struct 中只能定义属性,不能定义方法。方法必须用 impl 中定义。

pub struct Vector {
    data: Vec<f32>
}

impl Vector {
    fn new(value: f32, size: usize) -> Self { 
        Self{ data: vec![value; size] } 
    }
}

我给 Vector 定义了一个 new 方法。

2. 添加泛型

我不想让上面的代码仅支持 f32 类型的数据,下面的代码改成了泛型:

use std::vec::Vec;

pub struct Vector<T: Clone> {
    data: Vec<T>
}

impl<T: Clone> Vector<T> {
    fn new(value: T, size: usize) -> Self { 
        Self{ data: vec![value; size] } 
    }
}

其中泛型数据类型 T 需要说明支持 Clone 特性。rust 中的特性类似 c++ 的抽象类。上面的代码说明数据类型 T 必须实现了特性 Clone 才能用于 Vector 这个类型。因为代码刚开始写,后面的 T 还要能够进行数学运算,估计还得需要不断添加其他特性。

因为不了解 rust 中泛型的这个特点,我费了好大的劲才查到资料。加油,继续完成这个矩阵计算包。


原创不易,如果对您有帮助,请关注、点赞,谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值