【发布时间】:2020-12-02 15:03:29
【问题描述】:
我对处理数据的类型有一个特征:
pub trait Stage<I, O>: Sized {}
这里,I 和 O 分别代表输入和输出数据类型。我想创建一个Stage 的实现,它结合了另外两个Stages:
pub struct CompoundStage<S0: Stage<_, _>, S1: Stage<_, _>>(S0, S1);
CompoundStage 本身必须是Stage:
impl<S0: Stage<_, _>, S1: Stage<_, _>> Stage<S0::I, S1::O> for CompoundStage<S0, S1> {}
如何约束CompoundStage 的类型参数,以使“中间”类型保持一致(即S0::O == S1::I)?我知道我可以通过添加另一个类型参数来做到这一点,如下所示,但有没有更简洁的方法?
pub struct CompoundStage<S0: Stage<_, T>, S1: Stage<T, _>, T>(S0, S1);
impl<S0: Stage<_, T>, S1: Stage<T, _>, T> Stage<S0::I, S1::O> for CompoundStage<S0, S1, T> {}
【问题讨论】:
-
很难回答您的问题,因为它不包含minimal reproducible example。您提供的代码与自身不一致,无法编译。如果您尝试在 Rust Playground 上重现您的错误,如果可能的话,这将使我们更容易为您提供帮助,否则在全新的 Cargo 项目中,然后在 edit 您的问题中包含附加信息。您可以使用Rust-specific MRE tips 来减少您在此处发布的原始代码。谢谢!
标签: generics rust type-constraints