是否有可能(以任何方式)将特征对象传递给泛型方法?
Is it possible (in any way) to pass a trait object to a generic method?
我有一个盒装特征对象;我想知道是否可以以任何方式将其传递给绑定泛型类型的方法:
trait Trait {
fn tmethod(&self) {
println!("hello");
}
}
impl Trait for Vec<i32> {}
fn call_tmethod<T: Trait>(t: T) {
t.tmethod();
}
fn main() {
let obj: Box<dyn Trait> = Box::new(vec![0]);
call_tmethod(obj);
}
通常应该没有问题,因为 Box
实现了 AsRef
use core::fmt::Display;
trait Foo {
fn foo(&self) {
println!("hello");
}
}
impl Foo for i32 {}
fn display<T: Foo>(t: &T) {
t.foo();
}
fn main() {
let foo = Box::new(10);
display(foo.as_ref());
}
请注意,该方法实际上采用了对对象的引用 &
。否则你将不得不实现 &T where T: Foo
的特征,比如:
impl<T: Foo> Foo for &T { ... }
我有一个盒装特征对象;我想知道是否可以以任何方式将其传递给绑定泛型类型的方法:
trait Trait {
fn tmethod(&self) {
println!("hello");
}
}
impl Trait for Vec<i32> {}
fn call_tmethod<T: Trait>(t: T) {
t.tmethod();
}
fn main() {
let obj: Box<dyn Trait> = Box::new(vec![0]);
call_tmethod(obj);
}
通常应该没有问题,因为 Box
实现了 AsRef
use core::fmt::Display;
trait Foo {
fn foo(&self) {
println!("hello");
}
}
impl Foo for i32 {}
fn display<T: Foo>(t: &T) {
t.foo();
}
fn main() {
let foo = Box::new(10);
display(foo.as_ref());
}
请注意,该方法实际上采用了对对象的引用 &
。否则你将不得不实现 &T where T: Foo
的特征,比如:
impl<T: Foo> Foo for &T { ... }