gpt4 book ai didi

rust - 一次实现多种类型的特征

转载 作者:行者123 更新时间:2023-11-29 07:43:02 27 4
gpt4 key购买 nike

我有两个结构和一个特征:

struct A {
x: u32,
}

struct B {
x: u32,
}

trait T {
fn double(&self) -> u32;
}

我想使用 x 为两个结构实现 T

有没有办法写类似的东西

impl T for A, B {
fn double(&self) -> u32 {
/* ... */
}
}

如果可能,我不想使用宏。

最佳答案

为许多具体类型实现一次特征的唯一方法是为已经实现另一个特征的所有类型实现一个特征。

例如,您可以实现标记特征 Xed 然后:

impl<T> Double for T
where
T: Xed,
{
fn double(&self) {
/* ... */
}
}

但是,Rust 有原则性的泛型。在前面的实现中,您对 T 的唯一了解是 T 实现了 Xed trait,因此您可以使用的唯一关联类型/函数是那些来自 Xed 的类型/函数。

特征不能公开字段/属性,只能公开关联的类型、常量和函数,因此 Xed 需要 x 的 getter(不需要调用 x).

如果您希望依赖代码的句法(而不是语义)属性,请使用宏。

关于rust - 一次实现多种类型的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39150216/

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