[英]Does the 'generic blanket impl of ToString' conflict with the 'impl Tostring for char/str/String…' in rust
T 有一个通用的整体 impl ToString,
impl<T> ToString for T where
T: Display + ?Sized,
我还注意到impl ToString for char/str/String
...,以及库文档https://doc.rust-lang.org/std/string/trait.ToString.html#implementors中的许多其他类型。
它是否与通用毯子 impl 冲突?
显然它不冲突,因为它有效☺
但你是对的,它应该冲突。 有一个正在开发的功能称为“专业化” ,它使编译器能够在存在多个impl
时解决冲突,前提是一个比其他的更具体。 在这种情况下,实现显式类型( char
或String
)比任何泛型impl<T> for T
更具体,因此它可以工作。
这个特性对于一般用途来说还不够稳定,但它的一个子集被认为足以在 Rust 标准库中使用,正如你在impl ToString for char
的源代码中看到的:
#[stable(feature = "char_to_string_specialization", since = "1.46.0")]
impl ToString for char {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.