gpt4 book ai didi

rust - 如何要求两个特征的关联类型相同?

转载 作者:行者123 更新时间:2023-11-29 08:34:23 25 4
gpt4 key购买 nike

<分区>

我有以下两个特点:

trait Filter {
type Message;
fn is_valid(&self, message: &Self::Message) -> bool;
}

trait Client {
type Message;
fn send(&self, message: &Self::Message) -> Result<(), Error>;
}

我希望 FilterClient 的实现使用相同的 Message 类型。

struct ClientWithFilter<C: Client, F: Filter> {
filter: F,
client: C,
}

impl<C: Client, F: Filter> ClientWithFilter<C, F> {
/// C::Message or F::Message???
fn check_and_send(&self, message: &C::Message) -> Result<(), Error> {
if self.filter.is_valid(message) {
self.client.send(message)
} else {
Err(Error::MessageInvalid)
}
}
}

这不编译:

if self.filter.is_valid(message) {
| ^^^^^^^ expected client::Filter::Message, found client::Client::Message
|
= note: expected type `&<F as client::Filter>::Message`
found type `&<C as client::Client>::Message`

编译器看到 2 种不同的类型,而我希望只有一种。我怎样才能以正确的方式用 Rust 编写它?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com