On Sat, Feb 8, 2014 at 1:21 PM, Philippe Delrieu
<[email protected]>wrote:

> pub trait Base {
>     fn do_base(&self);
> }
>
> struct TestBase;
>
> impl Base for TestBase    {
>     fn do_base(&self)    {
>         println!("ici");
>     }
> }
>
> trait GenerciFn    {
>     fn do_generic<T: Base>(&self, base: &T);
> }
>
> struct DoGenericFn;
>
> impl GenerciFn for DoGenericFn {
>     fn do_generic<T: Base>(&self, base: &T)    {
>         base.do_base();
>     }
> }
>
> struct ToTestStr    {
>     vec_gen: ~[~TestBase],
> }
>
> impl ToTestStr    {
>     fn testgencall<T: GenerciFn>(&self, gen: &T)    {
>         for base in self.vec_gen.iter()    {
>             //let test = base as &~TestBase;
>             gen.do_generic(&**base);
>         }
>     }
> }
>
> #[main]
> fn main() {
>     let base = TestBase;
>     let test = ToTestStr {vec_gen: ~[~base],};
>     let gen = DoGenericFn;
>     test.testgencall(&gen);
>


It took me a few attempts to get the for loop right, but here you go.

pub trait Base {
    fn do_base(&self);
}

struct TestBase;

impl Base for TestBase {
    fn do_base(&self) {
        println!("ici");
    }
}

trait GenericFn {
    fn do_generic(&self, base: &Base);
}

struct DoGenericFn;

impl GenericFn for DoGenericFn {
    fn do_generic(&self, base: &Base) {
        base.do_base();
    }
}

struct ToTestStr {
    vec_gen: ~[~Base],
}

impl ToTestStr {
    fn testgencall<T: GenericFn>(&self, gen: &T)    {
        for ref base in self.vec_gen.iter() {
            gen.do_generic(**base);
        }
    }
}

#[main]
fn main() {
    let testbase = TestBase;
    let test = ToTestStr {vec_gen: ~[~testbase as ~Base],};
    let gen = DoGenericFn;
    test.testgencall(&gen);
}
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to