'generic blanket impl of ToString' 和 rust 中的 'impl Tostring for char/str/String...' 有冲突吗
Does the 'generic blanket impl of ToString' conflict with the 'impl Tostring for char/str/String...' in rust
T 有一个通用的全面实现 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。
它是否与通用毯子实现冲突?
显然没有冲突,因为它有效 ☺
但是你是对的,它应该冲突。有一项正在开发中的功能称为 "specialization",如果存在多个 impl
,则编译器可以解决冲突,前提是其中一个比其他的更具体。在这种情况下,实现显式类型(char
或 String
)比任何泛型 impl<T> for T
都更具体,因此它有效。
此功能对于一般用途而言还不够稳定,但它的一个子集被认为足以用于 Rust 标准库,如您在 the source code for impl ToString for char
:
中所见
#[stable(feature = "char_to_string_specialization", since = "1.46.0")]
impl ToString for char {
T 有一个通用的全面实现 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。
它是否与通用毯子实现冲突?
显然没有冲突,因为它有效 ☺
但是你是对的,它应该冲突。有一项正在开发中的功能称为 "specialization",如果存在多个 impl
,则编译器可以解决冲突,前提是其中一个比其他的更具体。在这种情况下,实现显式类型(char
或 String
)比任何泛型 impl<T> for T
都更具体,因此它有效。
此功能对于一般用途而言还不够稳定,但它的一个子集被认为足以用于 Rust 标准库,如您在 the source code for impl ToString for char
:
#[stable(feature = "char_to_string_specialization", since = "1.46.0")]
impl ToString for char {