对于我不拥有的类型,我如何实现我不拥有的特性?我想实现Shl特征Vec,代码在下面。这会使事情像vec << 4有可能,这是很好的糖vec.push(4).use std::ops::Shl;impl<T> Shl<T> for Vec<T> {
type Output = Vec<T>;
fn shl(&self, elem: &T) -> Vec<T> {
self.push(*elem);
*self
}}fn main() {
let v = vec![1, 2, 3];
v << 4;}编译失败,出现以下错误:无法提供在此机箱中未定义特征和类型的扩展实现[E 0117]或类型参数T必须用作某些本地类型的类型参数(例如,MyStruct<T>);只有当前机箱中定义的特征才能对类型参数[E 0210]实现。据我所知,我必须修补stdlib,更具体地说,collections::vec箱子。是否有另一种方法可以将此代码更改为成功编译?
2 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
use somecrate::FooType;use somecrate::BarTrait;struct MyType(FooType);impl BarTrait for MyType { fn bar(&self) { // use `self.0` here }}
慕虎7371278
TA贡献1802条经验 获得超4个赞
这会使事情像 vec << 4
有可能,这是很好的糖 vec.push(4)
.
use std::ops::Shl;struct BadVec<T>(Vec<T>);impl<T> Shl<T> for BadVec<T> { type Output = BadVec<T>; fn shl(mut self, elem: T) -> Self::Output { self.0.push(elem); self }}fn main() { let mut v = BadVec(vec![1, 2, 3]); v = v << 4; assert_eq!(vec![1, 2, 3, 4], v.0)}
use std::ops::{Deref, DerefMut};impl<T> Deref for BadVec<T> { type Target = Vec<T>; fn deref(&self) -> &Self::Target { &self.0 }}impl<T> DerefMut for BadVec<T> { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 }}
Vec
fn main() { let mut v = BadVec(vec![1, 2, 3]); v = v << 4; v.truncate(2); assert_eq!(2, v.len());}
newtype_derive
添加回答
举报
0/150
提交
取消