Associated Types
https://doc.rust-lang.org/book/associated-types.html
trait Graph { type N; type E; fn has_edge(&self, &Self::N, &Self::N) -> bool; fn edges(&self, &Self::N) -> Vec<Self::E>; } struct Node; struct Edge; struct MyGraph; impl Graph for MyGraph { type N = Node; type E = Edge; fn has_edge(&self, n1: &Node, n2: &Node) -> bool { true } fn edges(&self, n: &Node) -> Vec<Edge> { Vec::new() } } fn main() { let graph = MyGraph; let obj = Box::new(graph) as Box<Graph<N=Node, E=Edge>>; }