繁体   English   中英

在 rust 中,“ToString 的通用毯式实现”是否与“用于 char/str/String 的 impl Tostring...”冲突

[英]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时解决冲突,前提是一个比其他的更具体。 在这种情况下,实现显式类型( charString )比任何泛型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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM