我正在嘗試完成以下任務:
定義一個泛型類,讓這個類接受一個具有特征的抽象資料型別,并使用一些已知的方法初始化自己,如下所示:
struct Edge<MetaData>
{
next_id: u64,
prev_id: u64,
pair_id: u64,
vert_id: u64,
face_id: u64,
meta_data: MetaData,
}
impl<MetaData> Edge<MetaData>
{
fn new(vert_id: u64, pair_id: u64, data: MetaData) -> Self
{
return Self {
next_id: !0,
prev_id: !0,
pair_id,
vert_id,
face_id: !0,
meta_data: data,
};
}
}
struct HalfMesh<
VMetaData,
EMetaData,
FMetaData,
> {
verts: Vec<Vert<VMetaData>>,
edges: Vec<Edge<EMetaData>>,
faces: Vec<Face<FMetaData>>,
}
impl<V, E, F> HalfMesh<V, E, F>
{
fn new_mesh<T>(data: T)
where T :MeshData
{
let topology = data.get_topology();
let half_edges = HashMap::<(u64, u64), usize>::new();
let verts = Vec::<Vert<V>>::new();
let edges = Vec::<Edge<E>>::new();
let faces = Vec::<Face<F>>::new();
for (face_id, face) in topology.iter().enumerate()
{
for i in 0..face.len()
{
let face_id = face_id as u64;
let edge1 = (face[i], face[(i 1) % face.len()]);
if half_edges.contains_key(&edge1)
{
continue;
}
let n = edges.len() as u64;
edges.push(Edge::new(n 1, edge1.0, data.get_edge_data(face_id, i as u64)));
}
}
}
}
trait MeshData
{
type VertData;
type EdgeData;
type FaceData;
fn get_vert_data(&self, vert_id: u64) -> Self::VertData;
fn get_edge_data(&self, face_id: u64, edge_id: u64) -> Self::EdgeData;
fn get_face_data(&self, face_id: u64) -> Self::FaceData;
fn get_topology(&self) -> &Vec<Vec<u64>>;
}
然而,這正在回傳錯誤:
64 | impl<V, E, F> HalfMesh<V, E, F>
| - this type parameter
...
88 | edges.push(Edge::new(n 1, edge1.0, data.get_edge_data(face_id, i as u64)));
| --------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected type parameter `E`, found associated type
| |
| arguments to this function are incorrect
這是有道理的,E 是泛型型別,并且關聯型別MeshData::EdgeData不限于等于 E。
但后來我不知道如何分辨生銹,是的,順便說一句,約束HalfMesh它可以由以下型別初始化MeshData:\
uj5u.com熱心網友回復:
您似乎忘記指定關聯型別的型別:
new_mesh<T>(data: T)
where T: MeshData<
VertData = V,
EdgeData = E,
FaceData = F,
> {
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b8c166a7380bb4c58a60a6eaf2954714
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519880.html
標籤:仿制药锈元编程
