如何将使用特征参数实现特征的对象推入Vec?

问题描述

我试图将实现了带有trait参数的trait的对象推入Vec

trait IRequest {}

trait IRequestHandler<T>
where
    T: IRequest,{
    fn handle(&self,request: T);
}

pub struct CreateTodoRequest();

impl IRequest for CreateTodoRequest {}

pub struct CreateTodoRequestHandler();

impl IRequestHandler<CreateTodoRequest> for CreateTodoRequestHandler {
    fn handle(&self,request: CreateTodoRequest) {}
}

fn main() {
    let request = CreateTodoRequest {};
    let handler = CreateTodoRequestHandler();
    let mut handlers: Vec<&dyn IRequestHandler<dyn IRequest>> = Vec::new();

    handlers.push(&handler);
}

我得到一个错误:

error[E0277]: the trait bound `CreateTodoRequestHandler: IRequestHandler<dyn IRequest>` is not satisfied
  --> src/main.rs:25:19
   |
25 |     handlers.push(&handler);
   |                   ^^^^^^^^ the trait `IRequestHandler<dyn IRequest>` is not implemented for `CreateTodoRequestHandler`
   |
   = help: the following implementations were found:
             <CreateTodoRequestHandler as IRequestHandler<CreateTodoRequest>>
   = note: required for the cast to the object type `dyn IRequestHandler<dyn IRequest>`

当我有一个没有参数的IRequestHandler时,可以将其强制转换并推入Vec中。仅当特征具有参数时才会出现问题。

是否可以使用其实现的参数将对象转换为特征?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...