如何解决如何将使用特征参数实现特征的对象推入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 举报,一经查实,本站将立刻删除。