M
Size: a a a
M
e
A
e
A
A
e
🦉
e
🦉
A
e
A
A
e
Э
struct MyStruct;
trait Foo { fn foo(&self, var: i32) -> &'static str; }
impl Foo for MyStruct { fn foo(&self, var: i32) -> &'static str { "qwerty" } }
trait Bar { fn foo(&mut self, s: &str) -> i32; }
impl Bar for MyStruct { fn foo(&mut self, s: &str) -> usize { s.len() } }
Э
MyStruct::foo()
.Э
trait Foo { fn foo<A: Into<B>, B>(a: A) -> B { a.into() } }Тогда надо делать marker трейты:
trait Bar { fn foo(a: &str) -> String { a.to_owned() } }
trait NotStrMarker {}Неудобно, когда тебе надо только исключить не только один трейт или тип, но в стейбле специализации пока нет, а я не знаю, пишешь ли ты в найтли.
trait Foo { fn foo<A: Into<B>, B: NotStrMarker>(a: A) -> B { a.into() } }
В
trait Foo { fn foo<A: Into<B>, B>(a: A) -> B { a.into() } }Тогда надо делать marker трейты:
trait Bar { fn foo(a: &str) -> String { a.to_owned() } }
trait NotStrMarker {}Неудобно, когда тебе надо только исключить не только один трейт или тип, но в стейбле специализации пока нет, а я не знаю, пишешь ли ты в найтли.
trait Foo { fn foo<A: Into<B>, B: NotStrMarker>(a: A) -> B { a.into() } }