我遇到了这样的问题:我想创建一个具有多个字段的结构体,其中一个是枚举,它决定如何处理许多操作。枚举决定了一个重要函数具有什么input
和output
类型。我不希望主结构包含。input
/的初始化结构output
,因为它们往往变化很大,并且值对于主结构来说并不重要。
给定设置:
struct Model<I,O> {
name: String,
model_type: ModelType
_data_format: PhantomData::<(I,O)>
//... many other fields
}
enum ModelType{
Onnx,
DecisiomTree,
}
impl ModelType{
pub fn get_model<I,O>(self) -> Model<I,O>{
match self {
Self::Onnx => {
Model<I,O> {
name: "onnx".into(),
model_type: Self::Onnx,
PhantomData::<(OnnxInput,OnnxOutput)> // <--- Cant do it like this, what should be done here?? without initializing the given structures.
}
},
//.. other models
}
}
}
struct OnnxInput {
matrix: Vec<Vec<f64>>
}
struct DtInput {
color: f32,
size: f32,
//... more...
}
impl<I,O> Model<I,O> {
pub fn score(&self, input: I) -> O{
self.model_type.score::<I>(input)
}
}
impl ModelType{
pub fn score<I>(&self, input: I) -> O
}
1条答案
按热度按时间cu6pst1q1#
我认为你想要的是用单元结构实现一个trait,而不是
ModelType
枚举,如下所示:Playground.
我们现在有一个trait
ModelScore
,它与Input
和Output
相关联,ModelType
的变体被单元结构Onnx
和DecisionTree
所取代。这允许我们定义Model
示例,如main
函数中所示。您的输入和输出类型对于编译器来说是已知的,但是没有按照您的要求进行初始化。