オペレータオーバーロードしたいです。単純な Struct
ならいいのですが、 Rc<Struct>
に std::op::Add
を実装させようとすると、コンパイルできません。解決策はあるでしょうか。
use std::rc::Rc;
use std::ops::Add;
struct Struct;
// コンパイルできない
impl Add for Rc<Struct> {
type Output = Rc<Struct>;
fn add(self, rhs: Self) -> Self::Output {
Rc::new(Struct{})
}
}
// コンパイルできる
impl Add for Struct {
type Output = Struct;
fn add(self, rhs: Self) -> Self::Output {
Struct{}
}
}
fn main() {}
コンパイルエラーのメッセージは以下です。
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
= note: the impl does not reference any types defined in this crate
= note: define and implement a trait or new type instead