"必须指定相关类型的值"在另一个结构中存储带有类型参数的结构时

时间:2018-04-06 23:25:40

标签: rust

我想知道如果有类型参数,如何将结构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的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您的问题是LambdaMetaFactory不是类型,而是绑定,因此您不能将其用作类型参数。您可以使用满足绑定的类型参数来对结构进行参数化:

Device + 'static

我认为编译器不会允许您正在寻找的擦除方式-考虑我们是否有类似的代码:

pub struct Foo<D : Device + 'static> {
    iface: Interface<'static, 'static, 'static, D>,  
}