12.3 Traits

당연히 trait도 제네릭이 될 수 있다. 여기서는 Drop trait을 제네릭 메소드로 재구현하여 자신과 입력되는 것을 drop하도록 정의한다. Of course traits 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: 해당 라인의 주석을 제거해보세요. 
}

See also:

Drop, struct, and trait

results matching ""

    No results matching ""