Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

트레이트

물론 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: 이 줄들의 주석을 해제해 보세요.
}

참고:

Drop, 구조체, 그리고 트레이트