我在Rust用户论坛上发现了这个问题:Generics: Can I say "tuple where each element is FromSql"。基本上,问题是知道如何做这样的事情:
trait Foo {}
struct A {}
impl Foo for A {}
struct B {}
impl Foo for B {}
fn main() {
let x = (A{}, A{}, B{}, A{});
bar(x);
}
fn bar<T: Foo>(tuple: (T...)) {
}
这个代码不工作,这是一个想法,它可能看起来像.
那么,我们如何才能做到这一点?
2条答案
按热度按时间ffx8fchx1#
ToAny
trait,它将为我们所有的结构实现。它需要实现
ToAny
trait来强制每个实现Foo
的结构也实现ToAny
。ToAny
的实现总是相同的,我们可以创建一个宏来轻松实现它。Vec
来代替元组来存储我们的值:如果我们参考这个问题,下面的代码:
可以是此有效代码:
我已经写了a gist file来测试它。小心,我在这篇文章中更改了名称,
Foo
是A
,只有B
结构。krcsximq2#
使用宏实现元组的
Foo
: