Предположим, что у меня есть
trait Happy {}
Я могу реализовать Happy
для любой структуры, которую я могу захотеть, например:
struct Dog;
struct Cat;
struct Alligator;
impl Happy for Dog {}
impl Happy for Cat {}
impl Happy for Alligator {}
Теперь я хотел бы автоматически *Черта 1008 * my 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.Есть ли обходной путь?