Points d’architecture impliquant les traits
1. Traits, génériques et structures
Selon le contexte fonctionnel et ce que l’on souhaite faire, nous avons à présent plusieurs manières de proposer une architecture impliquant traits et génériques.
Imaginons un trait nous permettant de définir une course cycliste d’un jour :
// Course d'un jour.
trait course_jour {
}
On aura alors plusieurs structures à même d’implémenter ce trait. On peut imaginer les structures ParisRoubaix, ParisTroyes, RedonRedon, etc.
Fort de cette première définition, on se dit que l’on peut construire à présent une structure à même d’accueillir une course par étapes. Pour cela, la structure inclurait un vecteur contenant chaque étape. Comment peut-on combiner la structure Course par étapes avec le trait Course d’un jour ?
Première proposition :
// Course par étapes.
struct course_étapes<J : course_jour> {
etapes : Vec<J>
}
On a un vecteur contenant plusieurs courses, mais toujours issues de la même structure. Ce n’est pas idéal d’avoir n fois Paris-Auxerre à courir. En effet, on a forcément dans notre vecteur uniquement des instances d’une même structure.
Deuxième proposition :
// Course par étapes 2.
struct course_étapes...