Rust에서 연산자 오버로드 방법.

Rust에서 특정 특성이 구현된 유형은 서로 더하기, 빼기, 곱하기, 나누기 등을 할 수 있습니다.

사용자 정의 유형을 연산자 오버로드하려면 해당 유형에 대해 이러한 특성을 구현해야 합니다.

문제의 특성은 std::ops::*;의 표준 라이브러리에서 가져왔으며 다음을 수행하여 구현할 수 있습니다.

먼저 사용할 수 있는 두 개의 구조체를 만들어 보겠습니다.

struct Foo(i32);
struct Bar(i32);


표준 라이브러리의 특성을 사용하는 것을 잊지 마십시오.
(꼭 사용할 필요는 없지만 편의상 import 하겠습니다)

use std::ops::{Add};

struct Foo(i32);
struct Bar(i32);


이를 위해 나는 단지 추가만 보여줄 것이다. 추가를 배운 후에 나머지는 구현하기 쉬워야 합니다.

다음으로 구조체에 대해 방금 가져온 이러한 특성을 구현해 보겠습니다.

impl Add<Bar> for Foo {
   /// Todo
}


위에서 구조체 Foo + Bar에 대해 Add를 구현한 방법을 볼 수 있습니다. 이제 기능만 추가하면 됩니다.

impl Add<Bar> for Foo {
    type Output = i32;
    fn add(self, b: Bar) -> i32 {
        self.0 + b.0
    }
}


그것이 어떻게 작동하는지 보기 위해 지금 추가하기 위한 전부입니다.

이상하게 보일 수 있는 첫 번째 것은 출력 유형입니다. 이는 단순히 특성이 있고 구현자가 특성 내의 함수에 반환 유형을 추가할 수 있기를 원하는 경우 반환 유형을 유형으로 설정해야 하기 때문입니다. 구현자가 이동하여 변경할 수 있도록 만듭니다.

이상하게 보일 수 있는 또 다른 것은 우리가 add라는 함수를 만들고 있다는 것입니다. add는 이미 Add 특성 내에 정의되어 있습니다. 우리는 단순히 내부에 새 코드를 추가하여 out 유형에 대해 작동하도록 하고 있습니다. 범위 내에서 함수를 생성합니다.

이제 작동하는지 봅시다!

fn main() {
    let f = Foo(10);
    let b = Bar(20);
    println!("{}", f + b);
}


이제 프로그램을 실행하면cargo r 30의 출력을 얻을 수 있습니다!

이것이 Rust에서 연산자 오버로드 방법입니다.

좋은 웹페이지 즐겨찾기