12.3 Traits
당연히 trait
도 제네릭이 될 수 있다. 여기서는 Drop
trait
을 제네릭 메소드로 재구현하여 자신과 입력되는 것을 drop
하도록 정의한다.
Of course trait
s can also be generic. Here we define one which reimplements
the Drop
trait
as a generic method to drop
itself and an input.
// 복사 불가능한 타입들.
struct Empty;
struct Null;
// `T`에 제네릭인 trait.
trait DoubleDrop<T> {
// 추가로 하나의 매개변수 `T`를 취하고 이걸로 아무것도 안하는
// 메소드를 호출자 타입에 정의한다.
fn double_drop(self, _: T);
}
// `DoubleDrop`를 모든 제네릭 매개변수 `T`와 호출자 `U`에 대해 구현한다.
impl<T, U> DoubleDrop<T> for U {
// 이 메소드는 전달되는 인자 모두에 대한 소유권을 획득하고,
// 모두 할당 해제한다.
fn double_drop(self, _: T) {}
}
fn main() {
let empty = Empty;
let null = Null;
// `empty`와 `null`을 할당해제한다.
empty.double_drop(null);
//empty;
//null;
// ^ TODO: 해당 라인의 주석을 제거해보세요.
}