我想知道如果有类型参数,如何将结构Interface
作为另一个结构中的字段。
pub struct Interface<'a, 'b, 'c, DeviceT: Device + 'a> {}
pub struct Foo {
iface: Interface<'static, 'static, 'static, Device + 'static>,
}
pub trait Device {
type RxBuffer: AsRef<[u8]>;
type TxBuffer: AsRef<[u8]> + AsMut<[u8]>;
}
这会导致错误:
error[E0191]: the value of the associated type `TxBuffer` (from the trait `Device`) must be specified
--> src/main.rs:4:49
|
4 | iface: Interface<'static, 'static, 'static, Device + 'static>,
| ^^^^^^^^^^^^^^^^ missing associated type `TxBuffer` value
error[E0191]: the value of the associated type `RxBuffer` (from the trait `Device`) must be specified
--> src/main.rs:4:49
|
4 | iface: Interface<'static, 'static, 'static, Device + 'static>,
| ^^^^^^^^^^^^^^^^ missing associated type `RxBuffer` value
interface
内有Foo
的正确方法是什么?
答案 0 :(得分:1)
您的问题是LambdaMetaFactory
不是类型,而是绑定,因此您不能将其用作类型参数。您可以使用满足绑定的类型参数来对结构进行参数化:
Device + 'static
我认为编译器不会允许您正在寻找的擦除方式-考虑我们是否有类似的代码:
pub struct Foo<D : Device + 'static> {
iface: Interface<'static, 'static, 'static, D>,
}