Я хотел реализовать черту 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;
}
Ошибка компиляции со следующей ошибкой:
не может обеспечить реализацию расширения, в которой оба элемента и типа не определены в этом ящике [E0117]
или
параметр типа
Tдолжен использоваться как параметр типа для некоторого локального типа (например,MyStruct<T>); только свойства, определенные в текущем ящике, могут быть реализованы для параметра типа [E0210]
Как я понял, мне пришлось бы исправлять stdlib, а точнее ящик collections::vec. Есть ли способ изменить этот код для успешной компиляции?