考慮我構建的以下結構。此結構的目的是在圖層變數中包含以下資料型別之一,網路的二維向量或網格的一維向量。我最初的計劃是將層變數設定為列舉(如下所示),但是我想在設定后附加到列舉中的值 - 我認為列舉不允許不復制?
這讓我想到了我的問題:如何將層定義為通用值并將其限制為僅允許2D Vector of Networks或1D Vector of Meshes?即使使用 Enums 是可能的,我想使用泛型會更干凈。
pub(crate) struct Mapping {
layers: NodeDefinition
}
impl Mapping {
pub(crate) fn new(node_definition: NodeDefinition) -> Mapping {
Mapping {
layers: node_definition
}
}
}
pub(crate) enum NodeDefinition {
NODE(Vec<Vec<Network>>),
LEAF(Vec<Mesh>),
}
uj5u.com熱心網友回復:
一段時間后,我設法使解決方案起作用。解決方案是定義一個“虛擬”特征,目前什么都不做(但將來會)。后來我將該型別定義為實作了 dummy trait 的泛型。這是其中的一些代碼:
下面的解決方案將泛型型別“T”限制為節點或網格。
pub(crate) struct Network<T> {
guid: Uuid,
input: bool,
output: bool,
subnet: T,
}
impl<T: Subnet> Network<T> {
pub(crate) fn new(subnet: T) -> Network<T> {
Network {
guid: Uuid::new_v4(),
input: true,
output: true,
subnet,
}
}
}
//// Concerned with Mesh Struct
pub(crate) struct Mesh {
}
impl Subnet for Mesh {}
impl Mesh {
pub(crate) fn new() -> Mesh {
Mesh {
}
}
}
/// Concerned with Node Struct
pub(crate) struct Node {
}
impl Subnet for Node {}
impl Node {
pub(crate) fn new() -> Node {
Node {
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311178.html
