[英]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.