Tenir compte de ces deux traits:Pourquoi ne puis-je pas ajouter une implante de couverture sur un trait avec un paramètre de type?
pub trait Foo {
fn new(arg: u32) -> Self;
}
pub trait Bar<P>: Foo {
fn with_parameter(arg: u32, parameter: P) -> Self;
}
Je voudrais ajouter les impl couverture:
impl<T: Bar<P>, P: Default> Foo for T {
fn new(arg: u32) -> Self {
Self::with_parameter(arg, P::default())
}
}
Mais je reçois l'erreur du compilateur:
error[E0207]: the type parameter `P` is not constrained by the impl trait, self type, or predicates
Je pense que je reçois ce erreur parce que je suis en train de violer les règles de cohérence des traits, mais je ne comprends pas exactement quelle règle cela pourrait briser. Pourquoi ce modèle n'est-il pas autorisé? Et, plus important encore, puis-je réaliser ce que je veux sans avoir une erreur?