Implementación

Al igual que las funciones, las implementaciones requieren cuidado para seguir siendo genéricas.


#![allow(unused)]
fn main() {
struct S; // Tipo concreto `S`
struct ValorGenerico<T>(T); // Tipo genérico `GenericVal`

// implementación de ValorGenerico donde especificamos explícitamente los parámetros de
// tipo:
impl ValorGenerico<f32> {} // Especifica `f32`
impl ValorGenerico<S> {} // Especifica `S` como se define arriba

// `<T>` Debe preceder al tipo para permanecer genérico
impl<T> ValorGenerico<T> {}
}
struct Val {
    val: f64,
}

struct ValGen<T> {
    val_gen: T,
}

// implementación de Val
impl Val {
    fn value(&self) -> &f64 {
        &self.val
    }
}

// implementación de ValGen para un tipo genérico `T`
impl<T> ValGen<T> {
    fn value(&self) -> &T {
        &self.val_gen
    }
}

fn main() {
    let x = Val { val: 3.0 };
    let y = ValGen { val_gen: 3i32 };

    println!("{}, {}", x.value(), y.value());
}

Ve también

impl y struct