我正在尝试为impl std::io::Read
和std::fs::DirEntry
实现我的自定义trait-这个想法是为directores以及文件、缓冲区等实现trait。
use std::fs::DirEntry;
use std::io::Read;
trait MyTrait {}
impl<T> MyTrait for T
where
T: Read,
{}
impl MyTrait for DirEntry {}
结果我得到了错误
error[E0119]: conflicting implementations of trait `MyTrait` for type `DirEntry`
--> src/mytrait.rs:11:1
|
6 | impl<T> MyTrait for T
| --------------------- first implementation here
...
11 | impl MyTrait for DirEntry {
| ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `DirEntry`
|
= note: upstream crates may add a new impl of trait `std::io::Read` for type `std::fs::DirEntry` in future versions
For more information about this error, try `rustc --explain E0119`.
据我所知,我不能同时为impl std::io::Read
和std::fs::DirEntry
实现MyTrait
,因为,不知何故,std::fs::DirEntry
已经实现了std::io::Read
。
然而,我找不到任何有关这一事实的信息在文档中。我试图找到一些东西在源代码中,但我的知识生 rust 的源代码是没有,所以使命失败。
我找到了一个解决方案,其中我应该手动实现MyTrait
的std::fs::File
,缓冲区等与一些帮助宏(如impl_mytrait
),但我想知道我可以在哪里找到有关可能的上游实现的信息-如果可能的话,我想找到比impl_mytrait
宏更好的解决方案。
1条答案
按热度按时间pokxtpni1#
如果您阅读了注解,就会发现错误不是因为这样的实现已经存在,而是因为
=注意:上游板条箱可能会在未来版本中为
std::fs::DirEntry
类型添加traitstd::io::Read
的新实现这里的“in future versions”表示目前没有这样的实现,但在Rust中是不允许的,因为添加这样的实现对您的机箱来说是一个破坏性的更改(即需要一个主要版本提升),而它只需要从上游机箱进行一个次要版本提升。