Rust에서 연산자 오버로드 방법.
3795 단어 operationssystemsrustcodenewbie
사용자 정의 유형을 연산자 오버로드하려면 해당 유형에 대해 이러한 특성을 구현해야 합니다.
문제의 특성은
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에서 연산자 오버로드 방법입니다.
Reference
이 문제에 관하여(Rust에서 연산자 오버로드 방법.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/willdoescode/how-to-operator-overload-in-rust-33cp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)