Generics 如何在许多可能的特质中使用特定特质?

Generics 如何在许多可能的特质中使用特定特质?,generics,rust,Generics,Rust,我有一些可以实现trait的结构,还有一个表示要使用哪个trait的枚举 如果我将结构存储在变量中,匹配枚举,然后运行trait fn,一切正常 如果我尝试取出匹配项并将其放入一个可重用的函数中,那么泛型T太一般了 获取此匹配并将其放入可重用函数的正确类型签名是什么 代码被简化了,在我的代码库中,我有一个更大的进程函数,它可以管理20种不同的结构类型,但它们都将实现相同的T{X}级别,并且必须打开枚举来处理每一种类型-我不想多次编写匹配分支 struct SA{ 萨:字符串 } 构造某人{ s

我有一些可以实现trait的结构,还有一个表示要使用哪个trait的枚举

如果我将结构存储在变量中,匹配枚举,然后运行trait fn,一切正常

如果我尝试取出匹配项并将其放入一个可重用的函数中,那么泛型T太一般了

获取此匹配并将其放入可重用函数的正确类型签名是什么

代码被简化了,在我的代码库中,我有一个更大的进程函数,它可以管理20种不同的结构类型,但它们都将实现相同的T{X}级别,并且必须打开枚举来处理每一种类型-我不想多次编写匹配分支

struct SA{
萨:字符串
}
构造某人{
sb:绳子
}
性状T1{
fn获取静态数据()->&'static str;
}
性状T2:T1{
fn获取数据(&self)->字符串;
}
性状T3{
fn获取静态数据略微不同()->&'static str;
}
性状T4:T3{
fn获取数据(&self)->字符串;
}
用于SA的impl T1{
fn获取静态数据()->&'static str{
“静态”
}
}
SA的impl T2{
fn获取插入数据(&self)->字符串{
self.sa.clone()+self::获取静态数据()
}
}
SA的impl T3{
fn获取静态数据略微不同()->&'static str{
“静态,与T1有点不同”
}
}
对SA实施T4税{
fn获取插入数据(&self)->字符串{
self.sa.clone()+self::获取静态数据
}
}
什么样的房子{
T2,
T4
}
fn进程错误(wtu:&WhichToUse,s:&T)->bool{
//不好:T太笼统了。
匹配wtu{
WhichToUse::T2=>{
T2::获取数据(&s);
返回true;
},
WhichToUse::T4=>{
T4::获取数据(&s);
返回true;
}
}
}
fn流程正常(wtu:&WhichToUse){
设s=SA{SA:SA.to_string()};
//确定:编译器检查变量's'是否具有正确的特征
匹配wtu{
WhichToUse::T2=>{
T2::获取数据(&s);
},
WhichToUse::T4=>{
T4::获取数据(&s);
}
}
}
fn main(){
设wtu=WhichToUse::T2;
设sa=sa{sa:sa.to_string()};
过程错误(&wtu,&sa);
}

您想要什么是不可能的。Rust是一种强类型语言。也许您可以为
get_static_data
get_ins_data
实现一个共同的特性,并使用它?我确实想到了,这两个实现在语义上是相同的,但具有不同的类型签名和生存时间。我想我需要一个隐藏实现细节的统一特征——我正在研究一个通用枚举来表示“这个特征或那个特征”(而不是默认的
,其中T:this+that