[Rust] 연산자 오버로딩

러스트는 오버로딩은 없는데 연산자 오버로딩은 있다.

그 방법이 c++/c#과는 사뭇 다른데, 연산자에 대해서 미리 정의된 트레잇을 구현하는 것이다.

해당 트레잇들은 std::ops 모듈 내에 선언되어있는데 그중 하나인 Add(+)는 이렇게 되어있다.

pub trait Add<RHS = Self>
{
ㅤtype Output;

ㅤfn add(self, rhs: RHS) -> Self::Output;
}ㅤ

그리고 이걸 사용하려면 이러면 된다.


image

image Output에 반환할 타입을 넣어주고.

rhs의 타입도 self 타입과 같다.

위에 보이듯이 Add가 <RHS=self>로 되어있으므로 따로 제너릭 명시 안해주면 자동으로 구현한 타입과 같아진다.

rhs에 다른걸 넣고싶다면 명시해주면 된다.
이렇게 image

image

참고 레퍼런스

https://doc.rust-lang.org/std/ops/