Rasgos

Por supuesto, los traits también pueden ser genéricos. Aquí definimos uno que re-implementa el trait Drop como un método genérico para drop en sí mismo y una entrada.

// Tipos no copiables.
struct Vacio;
struct Nulo;

// Un rasgo genérico sobre `T`.
trait DropDoble<T> {
    // Define un método en el tipo de llamador que toma un parámetro único adicional `T`
    // y no hace nada con él.
    fn drop_doble(self, _: T);
}

// Implementa `DropDoble <T>` para cualquier parámetro genérico `T` y lamador `U`.
impl<T, U> DropDoble<T> for U {
    // Este método toma posesión de ambos argumentos pasados, desasignando ambos.
    fn drop_doble(self, _: T) {}
}

fn main() {
    let vacio = Vacio;
    let nulo = Nulo;

    // Desasigna `vacio` y `nulo`.
    vacio.drop_doble(nulo);

    //vacio
    //nulo
    // ^ TODO: Intenta descomentar estas líneas.
}

Ve también

Drop, struct, y trait