【发布时间】:2019-04-06 20:38:30
【问题描述】:
假设我有一个
trait Happy {}
我可以为我想要的任何结构实现Happy,例如:
struct Dog;
struct Cat;
struct Alligator;
impl Happy for Dog {}
impl Happy for Cat {}
impl Happy for Alligator {}
现在,对于由所有实现 Happy 特征的类型组成的任何元组,我想自动 impl 我的 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 中没有可变参数泛型。有解决办法吗?
【问题讨论】:
-
宏。目前就是这样做的。
-
我不确定这是否可能。甚至标准库也要provide implementations for every possible length of a tuple, up to 12。
标签: rust tuples traits variadic