在不使用特征对象的情况下,是否可以在特征方法的返回位置中模拟“ impl Trait”?

时间:2019-02-06 19:56:21

标签: rust traits

我在某种程度上已经关注了存在性类型和GAT提案的进展(尽管我不确定是哪一种最适合我的问题),但是目前尚无。

这大概是我想要做的:

trait Trait: Sized {
    fn generic_associated<T>() -> impl Assoc<Item = T, Trait = Self>;
}

trait Assoc: Sized {
    type Item;
    type Trait: Trait;
}

这不会编译,因为在特征方法中,返回位置不能有impl Trait。有没有办法模仿类似的东西?我知道我可以返回Box<dyn Assoc<Item = T, Trait = Self>>,但这不是我的具体情况的选择。

我已阅读this博客文章(称为“匿名关联类型”的部分),其中声称可以使用Fn特征和一揽子实现来模拟类似的内容,但是我无法做到这一点将给定的示例应用于我的问题,因为该示例最后使用了独立功能,以避免必须命名具体类型。

修改

尽管该帖子未明确声称要模仿存在类型或泛型关联类型,但确实演示了一种使用Fn特征来使用匿名关联类型的技术。这是可以用来模拟存在性类型的东西吗?

0 个答案:

没有答案