小编Chr*_*nez的帖子

实现伪裸约束

我正在努力清除 Rust 中的依赖注入 (DI)。我有一些工作,但我正在努力让它变得更好。据我所知,锈病并没有支持裸约束与类型参数(如一些其他语言一样)。我试图确定是否有可能以不安全的方式伪造裸约束(假设这是必要的)。对于不正确的映射,我完全可以接受史诗失败。我对 Rust 的理解只是我需要说服它T确实实现U并且可以转换为它 - 隐式或显式。按演员表,我的意思是一个具体但通用的类型可以转换为 trait 对象,因为它实现了它(我意识到大多数人要求另一个方向,我理解那里的复杂性)。

包括我所拥有的一切都会有点多;然而,这里有一些背景。考虑到我们可以将工厂函数归结为(这有效):

Rc<dyn Fn(&ServiceProvider) -> Rc<dyn Any>>
Run Code Online (Sandbox Code Playgroud)

目前,我有一个看起来像(删节)的构建器:

pub struct ServiceDescriptorBuilder<TSvc: Any + ?Sized, TImpl> {
    _phantom_svc: PhantomData<TSvc>,
    _phantom_impl: PhantomData<TImpl>,
}

impl<TSvc: Any + ?Sized, TImpl> ServiceDescriptorBuilder<TSvc, TImpl> {
    pub fn from<F>(self, factory: F) -> ServiceDescriptor
    where
        F: Fn(&ServiceProvider) -> Rc<TSvc> + 'static, {
        // convert to factory
        let factory = Rc::new(move |sp| Rc::new(factory(sp)));
    }
}
Run Code Online (Sandbox Code Playgroud)

这完全适用于以下情况: …

rust

7
推荐指数
1
解决办法
98
查看次数

标签 统计

rust ×1