rustt怎么不显示服务器,如何将通用T的实例转换为Rust中的具体实例?

我正在尝试实现这种模式:

use std::any::Any;

use std::fmt::Debug;

trait CommandHandler {

fn execute(&self, data: TCommand);

}

#[derive(Debug)]

struct FooCommand {}

struct FooCommandHandler {}

impl CommandHandler for FooCommandHandler {

fn execute(&self, data: FooCommand) {

println!("Foo");

}

}

#[derive(Debug)]

struct BarCommand {}

struct BarCommandHandler {}

impl CommandHandler for BarCommandHandler {

fn execute(&self, data: BarCommand) {

println!("Bar");

}

}

fn execute(command: T)

where

T: Any + Debug,

{

println!("Command: {:?}", command);

match (&command as &Any).downcast_ref::() {

Some(c) => (FooCommandHandler {}).execute(c),

None => {}

};

match (&command as &Any).downcast_ref::() {

Some(c) => (BarCommandHandler {}).execute(c),

None => {}

};

}

fn main() {

(FooCommandHandler {}).execute(FooCommand {});

(BarCommandHandler {}).execute(BarCommand {});

execute(FooCommand {});

execute(BarCommand {});

}

这不起作用:

error[E0308]: mismatched types

--> src/main.rs:37:51

|

37 | Some(c) => (FooCommandHandler {}).execute(c),

| ^ expected struct `FooCommand`, found &FooCommand

|

= note: expected type `FooCommand`

found type `&FooCommand`

error[E0308]: mismatched types

--> src/main.rs:41:51

|

41 | Some(c) => (BarCommandHandler {}).execute(c),

| ^ expected struct `BarCommand`, found &BarCommand

|

= note: expected type `BarCommand`

found type `&BarCommand`

如何以保留以下要求的方式实现execute()方法:

类型XCommand应该完全天生执行它的XCommandHandler。

可能存在CommandHandler的多个实现。

命令处理程序接收(并使用)具体的命令实例,而不是对它的引用(不可能重复发送命令)。

本质上,我有一个泛型函数fn foo(v: T),我想发送给一些具体的函数fn foo1(v: Foo),fn foo2(v: Bar);我该怎么做?

transmute是唯一的选择吗?

请注意,这与Any::downcast_ref所做的不同,后者从通用值v返回&Foo,而不是Foo。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值