假设我有一个
trait Happy {}
我可以为任何我想要的结构体实现Happy
,例如:
struct Dog;
struct Cat;
struct Alligator;
impl Happy for Dog {}
impl Happy for Cat {}
impl Happy for Alligator {}
现在,我想自动实现对任何由所有实现“Happy”trait的类型组成的元组进行我的“Happy”trait。直观地说,全部为happy的元组也是happy的。
这样做可能吗?例如,我可以轻松地将“Happy”的实现扩展到任意两个“Happy”类型的元组:
impl <T, Q> Happy for (T, Q) where T: Happy, Q: Happy {}
因此,这段代码可以完美地编译:
fn f(_: impl Happy) {
}
fn main() {
f((Dog{}, Alligator{}));
}
但是我如何将其推广到任何长度的元组呢?据我所知,Rust 中没有变长泛型。是否有解决方法?