如何使用动态泛型编写结构?
How do I write a struct with dynamic generics?
假设我有以下结构
trait T{}
struct A<X:T>{
...
}
我想知道这样的事情是否可行
Box<A<dyn T>>
目前我遇到错误
the trait `Sized` is not implemented for `(dyn T + 'static)`
但是当我添加
trait T:Sized{}
我明白了
the trait cannot be made into an object because it requires `Self: Sized`
这是可能的,但是泛型在默认情况下具有 Sized
绑定,这会阻止它们被未确定大小的特征对象实例化。您需要指定 T: ?Sized
:
trait T {}
struct A<X: ?Sized + T> {}
例如:
trait T {}
impl T for () {}
struct A<X: ?Sized + T> {
value: X,
}
fn foo() {
let _ = Box::<A<()>>::new(A { value: () }) as Box<A<dyn T>>;
}
假设我有以下结构
trait T{}
struct A<X:T>{
...
}
我想知道这样的事情是否可行
Box<A<dyn T>>
目前我遇到错误
the trait `Sized` is not implemented for `(dyn T + 'static)`
但是当我添加
trait T:Sized{}
我明白了
the trait cannot be made into an object because it requires `Self: Sized`
这是可能的,但是泛型在默认情况下具有 Sized
绑定,这会阻止它们被未确定大小的特征对象实例化。您需要指定 T: ?Sized
:
trait T {}
struct A<X: ?Sized + T> {}
例如:
trait T {}
impl T for () {}
struct A<X: ?Sized + T> {
value: X,
}
fn foo() {
let _ = Box::<A<()>>::new(A { value: () }) as Box<A<dyn T>>;
}