Generics 在专业化稳定之前,如何在稳定的渠道上进行专业化?
如何通过稳定锈蚀实现以下(伪锈蚀)Generics 在专业化稳定之前,如何在稳定的渠道上进行专业化?,generics,rust,Generics,Rust,如何通过稳定锈蚀实现以下(伪锈蚀) pub fn read<T: Read>(stream: T) { let stream = if T implements BufRead { stream } else { BufReader::new(stream) }; // Work with `stream` } pub-fn-read(流:T){ let stream=如果T实现BufRead{ 流动 }否则{ Bu
pub fn read<T: Read>(stream: T) {
let stream = if T implements BufRead {
stream
} else {
BufReader::new(stream)
};
// Work with `stream`
}
pub-fn-read(流:T){
let stream=如果T实现BufRead{
流动
}否则{
BufReader::新建(流)
};
//与“流”一起工作`
}
我知道,但是我想用稳定的铁锈达到同样的效果。你不知道。RFC存在的全部原因是因为以前不可能
作为“证明”,请考虑<代码> STR::toSype 。在专业化出现之前,
str::to_string
使用了与ToString
的所有其他实现者完全相同的机制,这意味着它必须建立和使用格式化基础结构。这是相对昂贵和积极的基准。启用专门化后,Rust编译器将其用于str::to_string
,基准测试也得到了改进
如果Rust编译器不能在专门化之前进行专门化,那么其他代码就不太可能找到某种方法以通用方式解决它
对于您的具体情况,我同意您应该只接受实现
BufRead
(fn read(stream:T)
)的东西。就纯锈而言,很难:
- Stable没有专门化
- 铁锈不会使铸件脱落
BufRead
<可以创建代码>查询接口或专用解决方案来提供“可选”v指针
然而,我只需要BufRead
通过stream
实现。如果需要,调用者总是可以使用BufRead::new
包装他们的流