有通用特征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
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);
~~~~~~~~~~~~~~
如何将trait设置为函数参数的一种类型,并传递一个实现此特征的结构?
答案 0 :(得分:3)
您需要传递&mut adjacency_list
。这就是错误所说的,而且它是正确的:你已经将函数定义为采用&mut
指针,但是你直接传递了这个值。