Generics 如何为Rust泛型函数中绑定的?大小的多类型赋予可重用名称

Generics 如何为Rust泛型函数中绑定的?大小的多类型赋予可重用名称,generics,rust,Generics,Rust,以下面的代码为例 fn do_stuff(mut serial:Box){ //东西 } 例如,可以使用串行设备,也可以使用文件进行测试。这是可行的,但编写那种类型的绑定是相当困难的 如何为绑定命名,以便在其他函数中重用?使用(按照) trait-IoDev:io::Write+io::Read{} T{}的impl-IoDev 部分解决了这个问题,因为不再需要重复写+读,但我仍然需要在每个函数上重复?大小的。有没有办法避免重复这种情况?你的问题可能是这种特性没有自动实现。即使某个类型满足某

以下面的代码为例

fn do_stuff(mut serial:Box){
//东西
}
例如,可以使用串行设备,也可以使用文件进行测试。这是可行的,但编写那种类型的绑定是相当困难的

如何为绑定命名,以便在其他函数中重用?使用(按照)

trait-IoDev:io::Write+io::Read{}
T{}的impl-IoDev

部分解决了这个问题,因为不再需要重复
写+读
,但我仍然需要在每个函数上重复
?大小的
。有没有办法避免重复这种情况?

你的问题可能是这种特性没有自动实现。即使某个类型满足某个特征的所有先决条件,也必须手动为其编写
impl
。编译器不会自动执行此操作,因为实现一个trait可能会赋予它一些新的含义

例如,
std::iter::FusedIterator
特性没有方法或相关类型,唯一的要求是实现类型是一个
迭代器。编译器不能自动实现它,因为它具有特殊的意义,程序员必须决定是否应该为其特定的迭代器实现它

如果您想为满足条件的每种类型实现您的trait,您可以执行一揽子实现:

trait-IoDev:io::Write+io::Read{}
T{}的impl-IoDev

您的问题可能是该特性没有自动实现。即使某个类型满足某个特征的所有先决条件,也必须手动为其编写
impl
。编译器不会自动执行此操作,因为实现一个trait可能会赋予它一些新的含义

例如,
std::iter::FusedIterator
特性没有方法或相关类型,唯一的要求是实现类型是一个
迭代器。编译器不能自动实现它,因为它具有特殊的意义,程序员必须决定是否应该为其特定的迭代器实现它

如果您想为满足条件的每种类型实现您的trait,您可以执行一揽子实现:

trait-IoDev:io::Write+io::Read{}
T{}的impl-IoDev

为此编写新特性有什么问题?嗯,为这种情况声明一个新的特征似乎很好。我不介意声明一个新的特征,我只是不知道怎么做。Ömer我不知道这个问题+答案会对我有什么帮助。对于
trait IoDev:Write+Read{}
this
impl IoDev for t{}
,然后像
fn do_stuff
那样使用它,这就是Q&A的要点为它编写新特性有什么问题?嗯,为这种情况声明一个新的特征似乎很好。我不介意声明一个新的特征,我只是不知道怎么做。Ömer我不知道这个问题+答案会对我有什么帮助。对于
trait IoDev:Write+Read{}
this
impl IoDev for t{}
,然后像
fn do_stuff
那样使用它,这就是Q&A点。如果我向
impl
行和函数声明添加
?size
,那么这就行了。也没有办法把它弄出来吗?如果我在
impl
行和函数声明中都添加
?size
,那么这就行了。也没有办法把它弄出来吗?
trait IoDev : io::Write + io::Read {}
impl<T: io::Write + io::Read> IoDev for T {}