본문 바로가기
Rust

[Rust] Overloading 예제 (51일차)

by 꾸압 2023. 2. 2.

 

<예제 코드_1>

use std::ops;

struct Foo;
struct Bar;

#[derive(Debug)]
struct FooBar;

#[derive(Debug)]
struct BarFoo;

// The 'std::ops::Add' trait is used to specify the functionality of '+'.
// Here, we make 'Add<Bar>' - the trait for addition with a RHS of type 'Bar'.
// The follow block implements the operation: Foo + bar = FooBar
impl ops::Add<Bar> for Foo {
    type Output = FooBar;

    fn add(self, _rhs: Bar) -> FooBar {
        println!("> Foo.add(Bar) was called");

        FooBar
    }
}

// By reversing the types, we end up implementing non-commutative addition.
// Here, we make 'Add<Foo>' - the trait for addition with a RHS of type 'Foo'.
impl ops::Add<Foo> for Bar {
    type Output = BarFoo;

    fn add(self, _rhs: Foo) -> BarFoo {
        println!("> Bar.add(Foo) was called");

        BarFoo
    }
}

fn main() {
    println!("Foo + Bar = {:?}", Foo + Bar);
    println!("Bar + Foo = {:?}", Bar + Foo);
}

 

 


 

<참조 1> https://doc.rust-lang.org/rust-by-example/trait/ops.html

<참조 2>

 

 

댓글