如何在不使用 ops::Add 特征的情况下重载运算符?
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
。所以现在我想为每个实现 MyTrait
的结构实现 '+' 运算符而不使用 std::ops::Add
特征。
这是设计不可能的。
原因是 Rust 具有 orphan rules 禁止板条箱(您)实现类型的特征,除非至少其中之一(特征或类型)由该板条箱定义(您).
您正在尝试为所有类型 T
实现 std::op::Add
(在另一个板条箱 std
中定义的特征),其中一些不一定由您定义(因为任何crate 可以定义新的类型)。因此,您违反了孤儿规则。
So now i want to implement '+' operator for every struct that implements MyTrait
without using std::ops::Add
trait.
特征是运算符重载在 Rust 中的实现方式(以及大多数其他“生命周期”/“编译器”挂钩)。所以你基本上是在问如何在不实现 +
运算符的情况下实现 +
运算符。
答案是你不能。
因此您可以:
- 使用声明性宏实现你的特质和
Add
- 不使用
+
运算符
我有一些这样的代码:
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
。所以现在我想为每个实现 MyTrait
的结构实现 '+' 运算符而不使用 std::ops::Add
特征。
这是设计不可能的。
原因是 Rust 具有 orphan rules 禁止板条箱(您)实现类型的特征,除非至少其中之一(特征或类型)由该板条箱定义(您).
您正在尝试为所有类型 T
实现 std::op::Add
(在另一个板条箱 std
中定义的特征),其中一些不一定由您定义(因为任何crate 可以定义新的类型)。因此,您违反了孤儿规则。
So now i want to implement '+' operator for every struct that implements
MyTrait
without usingstd::ops::Add
trait.
特征是运算符重载在 Rust 中的实现方式(以及大多数其他“生命周期”/“编译器”挂钩)。所以你基本上是在问如何在不实现 +
运算符的情况下实现 +
运算符。
答案是你不能。
因此您可以:
- 使用声明性宏实现你的特质和
Add
- 不使用
+
运算符