Существует Generic черта Graph
Как установить общий признак как аргумент функции?
type NodeKey = usize;
type EdgeWeight = usize;
trait Graph<T> {
fn add_node(&mut self, node: T) -> NodeKey;
fn add_edge(&mut self, begin: NodeKey, end: NodeKey, weight: EdgeWeight);
fn new() -> Self;
}
и его реализация AdjacencyList
структура
struct AdjacencyList<T> {
// ...
}
impl<T> Graph<T> for AdjacencyList<T> {
// ...
}
Мне нужна функция, которая принимает пустой граф и делает что-то с ним.
fn create_sample_graph<T: Graph<&'static str>>(graph: &mut T) {
let key1 = graph.add_node("node1");
// ...
}
Я создаю экземпляр AdjacencyList
с &str
типа и отправить его в функцию.
fn main() {
let mut adjacency_list = AdjacencyList::<&str>::new();
create_sample_graph(adjacency_list);
}
Но компилятор выдает следующее сообщение об ошибке:
error: mismatched types:
expected `&mut _`,
found `AdjacencyList<&str>`
(expected &-ptr,
found struct `AdjacencyList`) [E0308]
create_sample_graph(adjacency_list);
~~~~~~~~~~~~~~
Как я могу установить признак как тип аргумента функции и передать там структуру, которая реализует эту черту?
Да. Ты прав! Я новичок в ржавчине, и его правила собственности для меня не очевидны. Из-за этого я часто ищу ответы на неправильные вопросы. Большое спасибо. –