對于我不擁有的類型,我如何實現我不擁有的特性?我想實現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
提交
取消