Comment créer des alias de trait?

Nov 08 2020

J'essaie de donner un alias à une fonction pour ne pas avoir à écrire sa signature chaque fois que j'implémente ce trait:

type PhySend = Fn();
trait MyTrait {
    fn set_phy_send<F: PhySend>(callback: F);
}

Mais j'obtiens:

type aliases cannot be used as traits rustc(E0404)

Alors, est-il impossible de donner des alias aux signatures de traits / fonctions? Ce serait ennuyeux d'écrire cette signature à chaque fois que j'implémente ce trait.

Réponses

5 SergedeGossondeVarennes Nov 09 2020 at 05:16

C'est parce que les alias peuvent être de n'importe quel type. Essayez plutôt de définir un nouveau trait.

trait your_function<T> : FnOnce() -> T {}

impl<T, U> your_function<T> for U where U: FnOnce() -> T {}

fn make_tea<F, T>(f: F) -> T
    where F: your_function<T>
{
    f()
}

fn main() {
    make_tea(|| String::new());
}