我有个小功能实现解析字节流,输出解析结果: (1)我首先实现定义一个包装结构体来包装值:
struct ValueWrapper<T>(T);
(2)实现一个流输入:
struct Stream<'a> {
stream: &'a[u8],
len: usize,
read: usize,
}
(3) 通过 ">>" 操作符 解析流:
impl<'a, T> Shr<&ValueWrapper<T>> for &Stream<'a> {
type Output = Self;
fn shr(self, rhs: &ValueWrapper<T>) -> Self::Output {
self >> &rhs.0;
self
}
}
这里 self >> &rhs.0; 会报错未定义实现, 我怎么对不同的T类型 实现 Stram >> &T。 操作?
1
共 7 条评论, 1 页
评论区
写评论没太看懂你的需求,既然用ValueWrapper包装了T,就代表只要实现
即可。 但你在shr方法内又调用了Stream >> T,就又变成需要实现
那ValueWrapper就没必要了。 还有个问题,type Output = Self,代表Stram >> ValueWrapper结果返回还是Stram,不应该是ValueWrapper吗?如果是需求是从Stram解析出ValueWrapper,那>>操作符不太适合
目前我有个解决方案:
但是 最后有一个 shr 需要返回引用类型,即self, 但是这里又需要使用self 调用 >> self 是 & mut T, 无法clone 或者 copy
大概就是这个功能: Stream >> ValueWrapper(T) Stream >> ValueWrapper.self.0
--
👇
bestgopher: 没看懂。。。
不好意思 这个方法 我没看懂
--
👇
ribs: impl<'a, T> Shr<&T> for &Stream<'a> 不行吗?再根据需要去限定T
没看懂。。。
impl<'a, T> Shr<&T> for &Stream<'a> 不行吗?再根据需要去限定T
我最开始的方法是加一个限定符: