基于布尔参数的开关类型(不继承)?

Switch type based on boolean parameter (without inheriting)?

我有一个代表某些化学过程的模型,我希望反应模型可以根据布尔参数在吸收和解吸之间切换 class(定义各自的模型)。 我试着这样做:

model Sorption
  boolean parameter absorbing;
  AbsorptionModel if absorbing else Desorptionmodel reaction;
equation
  reaction.T = T; //dummy usage
  ...

像这样使用它:

Sorption TestAbsorption(absorbing=true); // uses the absorption model
Sorption TestDesorption(absorbing=false); // uses the desorption model

当然,这种方式不行。 absorbing 在编译时已知,所以我觉得以某种方式实现它应该没问题。

我尝试使用 replaceable,但我不想(不必要地)制作 Sorption 的两个单独的子 class 只是为了切换反应模型的类型。似乎 replaceable/redeclare 只有在继承时才可用,但我可能错了?有没有办法做我想做的事?

AbsorptionModelDesorptionModel 都继承自相同的基础 class,并且具有相同的接口,如果相关的话。

不需要 if 并且不能将 if 与组件声明一起使用,条件组件除外(但这只会删除组件声明及其连接方程)。

model Sorption
  boolean parameter absorbing;
  replaceable model RModel = AbsorptionModel;
  RModel reaction;
equation
  reaction.T = T; //dummy usage
  ...

像这样使用它:

Sorption TestAbsorption(redeclare model RModel = AbsorptionModel); // uses the absorption model
Sorption TestDesorption(redeclare model RModel = Desorptionmodel); // uses the desorption model