J'essaie d'écrire un code qui est générique pour une opération, mais qui possède également des fonctions de commodité pour les opérations les plus courantes, comme l'addition, que je veux définir pour tous les types T: Add
.
Cela fonctionne bien si je définis des fonctions autonomes puisque je peux utiliser impl Trait
dans la valeur de retour pour cacher le type opaque.
Cependant, si je veux définir cette fonction à l'intérieur d'un trait, je suis obligé de nommer le type de <T as Add>::add
. Comment puis-je faire ?
use std::ops::Add;
struct Operation<T, F>
where
F: Fn(T, T) -> T,
{
arg: T,
f: F,
}
fn addition<T>(arg: T) -> Operation<T, impl Fn(T, T) -> T>
where
T: Add<Output = T>,
{
Operation { arg, f: T::add }
}
trait Addable<T>
where
T: Add<Output = T>,
{
fn addition(self) -> Operation<T, impl Fn(T, T) -> T>;
//fn addition(self) -> Operation<T, ???>;
}
Erreur :
error[E0562]: `impl Trait` not allowed outside of function and inherent method return types
--> src/main.rs:22:39
|
22 | fn addition(self) -> Operation<T, impl Fn(T, T) -> T>;
| ^^^^^^^^^^^^^^^^^^