当前位置:
首页
文章
前端
详情

Rust编程进阶:003、在结构体和方法中使用泛型

3、在结构体中使用泛型。

// 在结构体中使用泛型
#[derive(Debug)]
struct Point<T> {
    x: T,
    y: T,
}

#[derive(Debug)]
struct Point2<T, U> {
    x: T,
    y: U,
}

fn main() {
    let integer = Point { x: 1, y: 2 };
    println!("{:#?}", integer);

    let float = Point { x: 1.1, y: 2.2 };
    println!("{:?}", float);

    let a = Point2 { x: 1.1, y: 'a' };
    println!("a = {:?}", a);
}

4、枚举中的泛型。

// 在枚举中使用泛型
enum Option<T> {
    Some(T),
    None,
}

enum Result<T, E> {
    Ok(T),
    Err(E),
}

5、方法中的泛型。

// 在方法中使用泛型
struct Point<T> {
    x: T,
    y: T,
}

impl<T> Point<T> {
    fn get_x(&self) -> &T {
        &self.x
    }

    fn get_y(&self) -> &T {
        &self.y
    }
}

struct Point2<T, U> {
    x: T,
    y: U,
}

impl<T, U> Point2<T, U> {
    fn creat_point<V, W>(self, other: Point2<V, W>) -> Point2<T, W> {
        Point2 {
            x: self.x,
            y: other.y,
        }
    }
}

fn main() {
    let p = Point { x: 1, y: 2 };
    println!("x = {}", p.get_x());
    println!("y = {}", p.get_y());

    let p = Point { x: 1.1, y: 2.2 };
    println!("x = {}", p.get_x());
    println!("y = {}", p.get_y());

    let p1 = Point2 { x: 5, y: 1.1 };
    let p2 = Point2 { x: "hello", y: 'c' };
    let p3 = p1.creat_point(p2);
    println!("p3.x = {}, p3.y = {}", p3.x, p3.y);
}

6、总结:使用泛型并不会造成程序性能上的损失。Rust通过在编译时进行泛型代码的单态化来保证效率。单态化时通过填充编译时使用的具体类型,将通用代码转换为特定代码的过程。

本节全部源代码:
https://github.com/anonymousGiga/learn_rust/blob/master/learn_T/src/main.rs

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。