[英]How to overloading operator without using ops::Add trait?
我有一些这样的代码:
trait MyTrait{}
struct MyStruct{}
impl MyTrait for MyStruct{}
我想为每个实现 MyTrait 的结构实现“+”运算符,所以我尝试了这个
impl<T: MyTrait> std::ops::Add for T
{
...
}
但我得到错误: type parameter `T` must be used as the type parameter for some local type
。 所以现在我想在不使用std::ops::Add
trait 的情况下为每个实现MyTrait
的结构实现 '+' 运算符。
这在设计上是不可能的。
原因是 Rust 具有禁止板条箱(您)为类型实现特征的孤儿规则,除非其中至少一个(特征或类型)由该板条箱(您)定义。
您正在尝试为所有类型T
实现std::op::Add
(在另一个板条箱std
中定义的特征),其中一些类型不一定由您定义(因为任何板条箱都可以定义新类型)。 因此,您违反了孤儿规则。
所以现在我想在不使用
std::ops::Add
trait 的情况下为每个实现MyTrait
的结构实现 '+' 运算符。
特征是在 Rust (以及大多数其他“生命周期”/“编译器”挂钩)中实现运算符重载的方式。 所以你基本上是在问如何在不实现+
运算符的情况下实现+
运算符。
答案是你不能。
所以你可以:
Add
+
运算符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.