小编Pet*_*och的帖子

如何实现返回具有匹配类型参数的通用值的工厂特征?

请考虑以下代码(简化但可编译):

use std::sync::Arc;

pub trait ActorRef<Message> { /* ... */ }
pub trait Actor<Message> { /* ... */ }
pub trait ActorSpawner {
    /// Spawns a new actor returning an actor ref 
    /// for passing messages to it.
    fn spawn<Message,A,R>(actor: A) -> Arc<R>
        where R: ActorRef<Message>, A: Actor<Message>;
}
Run Code Online (Sandbox Code Playgroud)

是否可以实现ActorSpawner::spawn或实现与其他签名类似的东西?

这个想法

问题中的代码被简化以将其减少到我无法解决的核心部分.

通常,Actor应该具有由处理消息改变的可变状态(示例中缺少处理方法).您可以生成一个Actor并可以通过它与它通信ActorRef(示例中缺少send方法).

我想允许不同的"产卵"方式Actor.例如,消息处理可能发生在每个actor的一个线程上.或者可以在由其他actor共享的线程池上完成处理.

其他代码可能依赖于创建更多actor.使用的基础机制应该是抽象的.既然有特质ActorSpawner.

我试图解决它

让我们假设我们有一些虚拟实现ActorActorRef:

struct NoopActor;
impl<Message> Actor<Message> for NoopActor {} …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
1
解决办法
767
查看次数

标签 统计

rust ×1