Rust 如何在不使用dyn的情况下实现三重悬垂特性防锈?

Rust 如何在不使用dyn的情况下实现三重悬垂特性防锈?,rust,traits,Rust,Traits,我有三个相互依赖的特征,但我无法找到一种方法来静态定义这些特征,而不使用dyn 定义两个似乎很简单: pub-trait-TA{ fn getB()->选项; } 肺结核{ fn getA()->选项; } 但是用三个特性定义类似的东西似乎是不可能的(下面的代码没有编译): pub-trait-TA{ fn getB()->选项; fn getC()->选项; } 肺结核{ fn getA()->选项; fn getC()->选项; } 酒吧特征{ fn getA()->选项; fn getB

我有三个相互依赖的特征,但我无法找到一种方法来静态定义这些特征,而不使用
dyn

定义两个似乎很简单:

pub-trait-TA{
fn getB()->选项;
}
肺结核{
fn getA()->选项;
}
但是用三个特性定义类似的东西似乎是不可能的(下面的代码没有编译):

pub-trait-TA{
fn getB()->选项;
fn getC()->选项;
}
肺结核{
fn getA()->选项;
fn getC()->选项;
}
酒吧特征{
fn getA()->选项;
fn getB()->选项;
}

似乎有另一种想法比我想象的要容易

pub-trait-TA{
fn getB()->选项;
fn getC()->选项;
}
肺结核

trait-Ta{
B型:结核;
C型:Tc;
fn get_b(&self)->选项;
fn get_c(&self)->选项;
}
性状结核{
A型:Ta;
C型:Tc;
fn获取一个(&self)->选项;
fn get_c(&self)->选项;
}
性状Tc{
A型:Ta;
B型:结核;
fn获取一个(&self)->选项;
fn get_b(&self)->选项;
}

这可以用很多方式来解释。我怀疑这些泛型中至少有一些应该是关联类型,但抽象地说是不可能的。你说的关联类型是什么意思?假设这是一个图/链表的通用实现,节点可能有三种类型TA/TB/TC实现类型参数和关联类型之间的区别在于,参数由trait的用户选择,而关联类型则由实现它的类型选择。如果对同一类型的
Baz
同时执行
TC
TC
没有意义,那么它们可能应该是关联的类型,而不是参数。对于我来说,图表或链表是如何使用这些特性的,现在还不清楚,所以我不能确定。但是在尝试制作生锈的数据结构之前,请考虑阅读。你的解决方案好多了。