我在某种程度上已经关注了存在性类型和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
特征来使用匿名关联类型的技术。这是可以用来模拟存在性类型的东西吗?