特质专业化

时间:2017-08-26 17:45:33

标签: rust

我想定义特征A。我可以对A的任何内容std::default::Default执行u64,但我想要#![feature(specialization)] trait A {} impl<T: std::default::Default> A for T {} impl A for u64 {} fn main() {} 的特殊实现。专门化功能旨在实现此目的,以下代码编译良好:

protobuf::Message

现在我想使用另一个箱子(std::default::Default)而不是#![feature(specialization)] extern crate protobuf; trait A {} impl<T: protobuf::Message> A for T {} impl A for u64 {} fn main() {} 的特征。以下代码不起作用:

error[E0119]: conflicting implementations of trait `A` for type `u64`:
 --> src/main.rs:6:1
  |
5 | impl<T: protobuf::Message> A for T {}
  | ------------------------------------- first implementation here
6 | impl A for u64 {}
  | ^^^^^^^^^^^^^^^^^ conflicting implementation for `u64`

编译器抱怨实现冲突:

protobuf::Message

u64未针对std::default::Default实施,因此没有冲突,但这似乎并不真正相关,因为u64 为{{定义 1}},专业化适用于该案例。

由于我为具体类型指定了实现,我希望通过traits覆盖实现。

后续行动:我认为这不是Why do I get a conflicting implementations error when specializing a trait?的重复,因为此代码适用于标准库中定义的特征,并且无法用于外部包中定义的特征。在另一个问题中,错误在于严格的特征限制规范。这里,特化特征是一种原始类型,因此解决方案无法应用。

0 个答案:

没有答案