我想定义特征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?的重复,因为此代码适用于标准库中定义的特征,并且无法用于外部包中定义的特征。在另一个问题中,错误在于严格的特征限制规范。这里,特化特征是一种原始类型,因此解决方案无法应用。