트레이트
물론 trait도 제네릭일 수 있습니다. 여기서는 Drop 트레이트를 자신과 입력을 drop하는 제네릭 메서드로 재구현한 것을 정의합니다.
// 복사 불가능한 타입.
struct Empty;
struct Null;
// `T`에 대해 제네릭인 트레이트.
trait DoubleDrop<T> {
// 호출자 타입에 대해 추가적인 단일 파라미터 `T`를 취하고
// 아무것도 하지 않는 메서드를 정의합니다.
fn double_drop(self, _: T);
}
// 임의의 제네릭 파라미터 `T`와 호출자 `U`에 대해
// `DoubleDrop<T>`를 구현합니다.
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: 이 줄들의 주석을 해제해 보세요.
}