Sjo*_*ers 6 generics enums repr traits rust
我有一个读取位并创建枚举的函数。目前,调用者需要提供 EnumType 和该枚举的表示形式。如何更改函数,以便从 EnumType 推导出表示形式,以便调用者只需要提供 EnumType 而不是其表示形式?
// Example enum:
use num_enum::TryFromPrimitive;
#[derive(Debug, Clone, Copy, TryFromPrimitive)]
#[repr(u8)]
pub enum VehicleType {
Boat = 0,
Car = 1,
}
// Example of current functional call
extract_enum_bits::<VehicleType, u8>(&data, 2, 6);
// Current function:
fn extract_enum_bits<EnumType: std::convert::TryFrom<Repr>, Repr: ReadInto>(data: &[u8],start_bit: u64, bits_to_read: u8) -> EnumType
where <EnumType as std::convert::TryFrom<Repr>>::Error : std::fmt::Debug {
let enum_as_repr_int = extract_bits::<Repr>(&data, start_bit, bits_to_read);
EnumType::try_from(enum_as_repr_int).unwrap()
}
Run Code Online (Sandbox Code Playgroud)
想要的函数调用语法:
extract_enum_bits::<VehicleType>(&data, 2, 6)
Run Code Online (Sandbox Code Playgroud)
如何更改函数 extract_enum_bits 以支持这种新的调用语法?
或者以不同的方式提出问题。如何在问号处获取枚举表示类型(在本例中为 u8),同时满足最后一行“::try_from”施加的“std::convert::From”要求?
pub fn extract_enum_bits<EnumType: TryFromPrimitive>(data: &[u8],start_bit: u64, bits_to_read: u8) -> EnumType {
let enum_as_repr_int = extract_bits::< ???? >(&data, start_bit, bits_to_read);
EnumType::try_from(enum_as_repr_int).unwrap()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |